我在搜索中输入了“预订”这个词,并且已经从它返回“烹饪”的第五个结果开始,但是还有“预订”这个词的结果,它们包含在行中。
$this->aQuery['query']['bool']['must'][]['multi_match'] = [
'type' => 'cross_fields',
'query' => 'Booking',
'fields' => ['prod_name', 'prod_prefix'],
'operator' => 'or'
];我需要只包含“预订”这个词的结果。但如果您输入“旅行预订”,则结果可能包含“旅行”和“预订”。
发布于 2022-06-23 04:59:36
若要获得完全匹配,请使用术语查询
Match使用所谓的分析器来转换您的搜索并找到所有匹配的单词。搜索字符串上的术语检查是否完全匹配,因此搜索预订不应该返回包含“旅行预订”的文档。
如本页所述:
默认情况下,弹性搜索会在分析期间更改文本字段的值。例如,默认标准分析器将文本字段值更改如下:
术语查询不分析搜索项。术语查询只搜索所提供的确切术语。这意味着查询一词在搜索文本字段时可能返回差的或没有结果。。
还请注意,您需要在索引映射中包含关键字类型。
"prod_name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}然后,在搜索单词时,需要使用关键字字段名:
"term": {
"prod_name.raw": {
"value": "Booking",
"boost": 1.0
}
}https://stackoverflow.com/questions/72696925
复制相似问题