2016-11-03 2 views
2

나는 json 파일을 가지고 있는데, 이것을 반복하여 탄성을 가지고 색인을 붙인다. 그 후에는 내 데이터를 검색 할 수 있기를 원합니다.elasticsearch의 PHP 전문 검색

https://github.com/mhndev/iran-geography/blob/master/tehran_intersection.json

다음과 같습니다 : 내 쿼리가있을 때

{ 
    "RECORDS":[ 
     { 
     "first":{ 
      "name":"ابن بابویه", 
      "slug":"Ibn Babawayh" 
     }, 
     "second":{ 
      "name":"میرعابدینی", 
      "slug":"Myrabdyny" 
     }, 
     "latitude":"35.601605", 
     "longitude":"51.444208", 
     "type":"intersection", 
     "id":1, 
     "search":"ابن بابویه میرعابدینی,Ibn Babawayh Myrabdyny,ابن بابویه تقاطع میرعابدینی,Ibn Babawayh taghato Myrabdyny", 
     "name":"ابن بابویه میرعابدینی", 
     "slug":"Ibn Babawayh Myrabdyny" 
     }, 

... 
] 
} 

는 "미르"내 결과가 "mirabedini을 가지고 기록 될 것으로 기대

이 내 JSON 파일입니다 ","mirdamad ","samir "및이 문자열이 포함 된 다른 모든 단어가 포함됩니다.

하지만 난 그냥 정확히 "미르"

단어를 얻을이 검색에 대한 내 PHP 코드 :

$fields = ['search','slug']; 

$params = [ 
    'index' => 'digipeyk', 
    'type' => 'location', 
    'body' => [ 
     'query' => [ 
      'match' => [ 
       'fields' => $fields, 
       'query' => $_GET['query'] 
      ] 
     ], 

    'from' => 0, 
    'size' => 10 
    ] 
]; 



$client = ClientBuilder::create()->build(); 

$response = $client->search($params); 

및 문서를 색인이 내 PHP 코드.

$client = ClientBuilder::create()->build(); 
$deleteParams = ['index' => 'digipeyk']; 
$response = $client->indices()->delete($deleteParams); 

$intersections = json_decode(file_get_contents('data/tehran_intersection.json'), true)['RECORDS']; 
$i = 1; 

foreach($intersections as $intersection){ 

    echo $i."\n"; 

    $params['index'] = 'digipeyk'; 
    $params['id'] = $intersection['id']; 
    $params['type'] = 'location'; 
    $params['body'] = $intersection; 

    $response = $client->index($params); 

    $i++; 
} 

나는 PHP 7을 사용하고 기본적으로 와일드 카드 쿼리를 지원하지 않습니다 2.3

+0

하지만, 행운, : 링크를 탄성 방문에서 와일드 카드에 대한 자세한 내용은

$fields = ['search','slug']; $params = [ 'index' => 'digipeyk', 'type' => 'location', 'body' => [ 'query' => [ 'wildcard' => [ 'query' => '*'.$_GET['query'].'*' ] ], 'from' => 0, 'size' => 10 ] ]; $client = ClientBuilder::create()->build(); $response = $client->search($params); 

. '쿼리'=> "*"$ _GET [ 'query']. "*" – mhndev

답변