php elasticsearch 中的全文搜索

php full text search in elasticsearch

我有一个 json 文件,我遍历它并在 elastic 中对其进行索引。然后我希望能够搜索我的数据。

这是我的 json 文件:

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

...
]
}

当我的查询是:"mir" 时,我希望我的结果是包含 "mirabedini"、"mirdamad"、"samir" 以及包含此内容的所有其他单词的记录字符串.

但我得到的单词恰好是 "mir"

这是我的 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 和 elasticsearch 2.3

match查询默认不支持通配符查询,所以必须使用wildcard代替。

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

有关 elastic 中通配符的更多信息,请访问以下 link:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

为此:

'query' => $_GET['query']

你会在地狱中被焚烧:D