我需要的是,Elastic应该在多个字段中搜索并按字段优先级返回数据。
例如:对于搜索字符串obil hon
,elastic应该首先在Mobile Phone
字段中找到Title
,然后在字段{title,description,modelCaption]中搜索并返回数据。在其他领域。
我使用的查询:
{
"from": 0,
"query": {
"bool": {
"must": [
{
"query_string": {
"default_operator": "or",
"fields": [
"title^5",
"description",
"modelCaption",
"productFeatureValues.featureValue",
"productFeatureValues.featureCaption"
],
"query": "*obil* *hone*"
}
}
]
}
},
"size": 16
}
有什么建议吗?
谢谢!
答案 0 :(得分:1)
您可以简单地使用multi-match query来查询多个字段,它支持在您的情况下提升诸如title
之类的特定字段,并在您的情况下提升诸如OR
之类的不同运算符。
针对您的用例的示例ES查询:
{
"query": {
"multi_match" : {
"query" : "mobile phones",
"fields" : [ "title^5", "description","modelCaption","productFeatureValues.featureVal"],
"fuzziness" : "AUTO" --> Adding fuzziness to query
}
}
}
此处提交的标题会增加5倍,因此,如果手机在标题字段中匹配,则得分会更高。
另外请注意,您在查询字符串中使用通配符非常昂贵,因此,如果可以的话,最好避免使用通配符。
编辑:基于OP注释,在查询中包含fuzziness parameter AUTO以获得更好的结果