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 以获得更好的结果