ElasticSearch高级query_string查询

时间:2020-02-12 08:48:08

标签: elasticsearch querydsl elasticsearch-query

我需要的是,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
}

有什么建议吗?

谢谢!

1 个答案:

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

相关问题