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
我有一个 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