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

10-11 09:17