我需要的是,Elastic应该在多个字段中搜索并按字段优先级返回数据。
例如:对于搜索字符串obil hon
,elastic应该首先在field [title,description,modelCaption]中搜索,并在其首先Mobile Phone
在Title
field中找到数据,然后在其他字段中返回数据。
我使用的查询:
{
"from": 0,
"query": {
"bool": {
"must": [
{
"query_string": {
"default_operator": "or",
"fields": [
"title^5",
"description",
"modelCaption",
"productFeatureValues.featureValue",
"productFeatureValues.featureCaption"
],
"query": "*obil* *hone*"
}
}
]
}
},
"size": 16
}
有什么建议?
谢谢!
您可以简单地使用多重匹配查询来查询多个字段,它支持对特定字段(如title
您的情况)和不同运算符(如OR
您的情况)进行提升。
用于您的用例的示例ES查询:
{
"query": {
"multi_match" : {
"query" : "mobile phones",
"fields" : [ "title^5", "description","modelCaption","productFeatureValues.featureVal"],
"fuzziness" : "AUTO" --> Adding fuzziness to query
}
}
}
此处提交的标题会增加5倍,因此,如果手机在标题字段中匹配,则得分会更高。
另外请注意,您在查询字符串中使用通配符非常昂贵,因此,如果可以的话,最好避免使用通配符。
编辑:基于OP注释,在查询中包括模糊参数AUTO以获得更好的结果
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句