2016-11-03 6 views
2

Ich habe eine JSON-Datei, die ich durchschleifte und indexieren es in elastisch. und danach möchte ich in der Lage sein, meine Daten zu durchsuchen.php volltextsuche in elasticsearch

das ist meine JSON-Datei:

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

, die wie folgt aussieht:

{ 
    "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" 
     }, 

... 
] 
} 

wenn meine Frage ist: "ich", I, die „mirabedini hat erwarten mein Ergebnis seine Aufzeichnungen "," Mirdamad "," Samir ", und jedes andere Wort, das diese Zeichenfolge enthält.

aber ich nur Worte bekommen, die genau sind "ich"

und dies ist mein PHP-Code für die Suche:

$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); 

und auch dies ist mein PHP-Code für die Indizierung von Dokumenten.

$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++; 
} 

Ich bin mit PHP 7 und Elasticsearch 2.3

+0

Ich versuchte Stern um meine Frage zu stellen, aber kein Glück, wie folgt aus:. 'query' => "*" $ _GET ['Abfrage']. "*" – mhndev

Antwort

1

match Abfrage nicht Wildcard Abfrage standardmäßig unterstützen, so dass Sie wildcard statt, das verwenden.

$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); 

Weitere Informationen über Platzhalter in elastischen Besuch folgendem Link: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html