弹性搜索-查询字符串-根据自定义顺序返回结果

时间:2020-06-24 15:44:32

标签: elasticsearch

以下搜索查询结果按搜索关键字大于一个的顺序提供数据。

{
"query": {
    "query_string" : {
        "query" : "(Sony Music) OR (Sony Music*) OR (*Sony Music) OR (*Sony Music*)",
        "fields" : ["MDMGlobalData.Name1"]
    }
}

}

  1. 完全匹配。
  2. 然后,显示以搜索词开头的内容。
  3. 然后,显示以搜索词结尾的内容。
  4. 然后,显示其余部分。

但是,如果只是一个单词,请在查询数据中说sony。订单搞砸了。

请让我看看为什么会这样?以及使用query-string搜索获得上述有序结果的最佳方法是什么。

2 个答案:

答案 0 :(得分:0)

仅查询sony时,它应得分最低。那不是您所期望的吗?默认情况下,查询字符串似乎确实考虑了OR子句的顺序,因此我想说您的查询字符串已经非常优化。

您是否尝试过修改default_operator选项?

此外,sony“位于查询数据中”是什么意思?查询字符串本身还是字段MDMGlobalData.Name1sony的文档?

答案 1 :(得分:0)

但是,如果只是一个字,请在查询数据中说“ sony”。订单很乱 上。

根据您的上述陈述以及您在上述答案中提到的评论

使用示例文档和搜索查询添加工作示例

索引样本数据:

{
    "MDMGlobalData":{
        "name":"Sony Music"
    }
}
{
    "MDMGlobalData":{
        "name":"Sony Music Corp"
    }
}
{
    "MDMGlobalData":{
        "name":"All Sony Music Corp"
    }
}
{
    "MDMGlobalData":{
        "name":"Sony"
    }
}

搜索查询:

{
  "query": {
    "query_string": {
      "query": "(Sony) OR (Sony*) OR (*Sony) OR (*Sony*)",
      "fields": [
        "MDMGlobalData.name"
      ]
    }
  }
}

搜索结果:

"hits": [
        {
            "_index": "foo1",
            "_type": "_doc",
            "_id": "4",
            "_score": 3.1396344,
            "_source": {
                "MDMGlobalData": {
                    "name": "Sony"
                }
            }
        },
        {
            "_index": "foo1",
            "_type": "_doc",
            "_id": "1",
            "_score": 3.114749,
            "_source": {
                "MDMGlobalData": {
                    "name": "Sony Music"
                }
            }
        },
        {
            "_index": "foo1",
            "_type": "_doc",
            "_id": "2",
            "_score": 3.097392,
            "_source": {
                "MDMGlobalData": {
                    "name": "Sony Music Corp"
                }
            }
        },
        {
            "_index": "foo1",
            "_type": "_doc",
            "_id": "3",
            "_score": 3.084596,
            "_source": {
                "MDMGlobalData": {
                    "name": "All Sony Music Corp"
                }
            }
        }
    ]

正如您所看到的,顺序仍然保持不变,Sony的得分最高(应根据所查询的情况而定),然后根据得分的顺序进行进一步评分OR子句。