【发布时间】:2021-08-19 09:26:19
【问题描述】:
我正在尝试实现一个用例,其中用户可以对“product_name”字段进行多词/短语搜索。
假设有人在搜索“最富有的人”,应该会出现以下结果:
- 巴比伦首富
- 首富的故事
- 世界首富
- 如何赢得首富
搜索结果不得包含以下文档-
- 最富有的女人和男人
- 当一个穷人成为最富有的人
这是我写的分析器:
'settings' => [
'analysis' => [
'filter' => [
'autocomplete_filter' => ['type' => 'ngram', 'min_gram' => 1, 'max_gram' => 10]
],
'analyzer' => [
'autocomplete' => ['type' => 'custom', 'tokenizer' => 'standard', 'filter' => ['lowercase', 'autocomplete_filter']]
]
],
'index.max_ngram_diff' => 10
],
'mappings' => ['properties' => [
'product_name' => ['type' => 'text', 'analyzer' => 'autocomplete', 'search_analyzer', 'standard'],
]],
我正在使用以下用 PHP 编写的代码来发出搜索请求:
$params = [
'index' => ProductData::ELASTIC_INDEX,
'type' => ProductData::ELASTIC_TYPE,
'body' => [
'query' => ['match' => ['product_name' => ['query' => $requestVars['product_name']]]
],
]
];
$result = $this->client->search($params);
但是,我得到的结果是出乎意料的,而不是我上面列出的结果。
【问题讨论】:
标签: php elasticsearch search