假设我们有一个搜索查询吸尘器WSP 6666 C 22 C 2 KW橡胶我们希望与我们的索引匹配。索引产品中有:
...
"categories": [
"Vacuum cleaner",
"Blender",
],
"modelnumbers": [
"WSP 6666 C 22 C 2 KW",
"ABST 23",
"2h28f7h2i3f",
]
现在我希望将这两个类别匹配为modelnumber
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "Vacuum cleaner WSP 6666 C 22 C 2 KW rubber",
"default_operator": "OR",
"default_field": "categories",
"boost": "10"
}
},
{
"query_string": {
"query": "Vacuum cleaner WSP 6666 C 22 C 2 KW rubber",
"default_operator": "OR",
"default_field": "modelnumbers",
"boost": "10"
}
}
}
}
}
这显示了正确的结果。但是现在它匹配以下所有内容:
有没有一种可能的方式使用令牌器,它只能找到匹配?:
正如您所看到的,并非所有正则表达式都具有相同的格式,因此无法使用正则表达式标记器。
答案 0 :(得分:1)
处理此问题的正确方法是使用(edge-)ngrams索引数据。但在此之前,您可能希望尝试使用与您关注的字段匹配的{
"query": {
"multi_match": {
"query": "Vacuum cleaner WSP 6666 C 22 C 2 KW rubber",
"fields": [
"categories",
"modelnumbers"
]
}
}
}
查询:
sed
答案 1 :(得分:0)
按照Val的建议,还可以查看cross_fields多匹配查询。您可以稍后使用DisMax或Bool查询改进查询(DisMax查询实际上是一个bool查询)。