我需要的是,Elastic应该在多个字段中搜索并按字段优先级返回数据。
例如:对于搜索字符串obil hon
,elastic应该首先在Mobile Phone
字段中找到Title
,然后在其他字段中找到ojit_code,然后在字段[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
}
有什么建议么?
谢谢!
最佳答案
您可以简单地使用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以获得更好的结果
关于elasticsearch - ElasticSearch高级query_string查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60184357/