[英]Can't configure elasticsearch
我在搜索中输入单词“Booking”,并且已经从第 5 个结果开始返回“Cooking”,但是仍然有带有单词“Booking”的结果,它们包含在行中。
$this->aQuery['query']['bool']['must'][]['multi_match'] = [
'type' => 'cross_fields',
'query' => 'Booking',
'fields' => ['prod_name', 'prod_prefix'],
'operator' => 'or'
];
我需要只包含“预订”一词的结果。 但如果您输入“Travel Booking”,则结果可能同时包含“Travel”和“Booking”。
要获得完全匹配,请使用术语查询
Match 使用所谓的分析器来转换您的搜索并找到所有匹配的单词。 条款检查搜索字符串的完全匹配,因此搜索 Booking 不应返回包含“Travel Booking”的文档。
如页面所述:
默认情况下,Elasticsearch 在分析期间会更改文本字段的值。 例如,默认标准分析器更改文本字段值如下:
- 删除大部分标点符号
- 将剩余的内容分成单独的单词,称为标记
- 小写标记
词条查询不分析搜索词条。 术语查询仅搜索您提供的确切术语。 这意味着在搜索文本字段时,术语查询可能会返回较差的结果或没有结果。
另请注意,您需要在索引映射中包含关键字类型
"prod_name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
那么当你搜索你的单词时,你需要使用Keyword字段名:
"term": {
"prod_name.raw": {
"value": "Booking",
"boost": 1.0
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.