ElasticSearch 高级 query_string 查询
ElasticSearch advanced query_string query
我需要的是,elastic 应该在 多个字段和 return 数据中按字段优先级搜索。
例如:对于搜索字符串 obil hon
,elastic 应该在字段 [title, description, modelCaption] 和 return 数据中搜索,当它首先在 [=] 中找到 Mobile Phone
时14=]字段,然后在其他字段。
我使用的查询:
{
"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
}
}
}
这里的title filed提高了5倍,因此如果手机在title field中匹配,那么它的得分会更高。
另请注意,您在查询字符串中使用了通配符,这是非常昂贵的,因此最好避免使用它们。
编辑: 根据 OP 评论,在查询中包含 fuzziness parameter AUTO 以获得更好的结果
我需要的是,elastic 应该在 多个字段和 return 数据中按字段优先级搜索。
例如:对于搜索字符串 obil hon
,elastic 应该在字段 [title, description, modelCaption] 和 return 数据中搜索,当它首先在 [=] 中找到 Mobile Phone
时14=]字段,然后在其他字段。
我使用的查询:
{
"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
}
}
}
这里的title filed提高了5倍,因此如果手机在title field中匹配,那么它的得分会更高。
另请注意,您在查询字符串中使用了通配符,这是非常昂贵的,因此最好避免使用它们。
编辑: 根据 OP 评论,在查询中包含 fuzziness parameter AUTO 以获得更好的结果