在弹性搜索中,如何根据给定输入字符串的第一个结果按顺序获得结果?

2024-06-25 06:58:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉弹性搜索并尝试查询字符串

以下是我的疑问:

GET observations_corpus/_search
{
    "query": {
        "match": {
            "OBSERVATION.keyword": {
              "query": "RDW-CV=16.8%, WBC=9.010*3, RBC=3.2210*6",
              "analyzer": "keyword_analyzer",
              "operator": "or",
              "fuzziness": 1
            }
        }
    
    }
}

输出:

{
  "took" : 8,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 6.111533,
    "hits" : [
      {
        "_index" : "observations_corpus",
        "_type" : "_doc",
        "_id" : "0",
        "_score" : 6.111533,
        "_source" : {
          "OBSERVATION" : "WBC"
        }
      },
      {
        "_index" : "observations_corpus",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 6.111533,
        "_source" : {
          "OBSERVATION" : "RBC"
        }
      },
      {
        "_index" : "observations_corpus",
        "_type" : "_doc",
        "_id" : "7",
        "_score" : 4.9527483,
        "_source" : {
          "OBSERVATION" : "RDW-CV"
        }
      }

}

在我的查询中,所需标记的顺序是“RDW-CV,WBC,RBC”,但在输出命中中,顺序更改为“WBC,RBC,RDW-CV”

我们有没有办法得到hits w.r.t输入订单? 有人能帮我吗


Tags: idsourceindexdoctypecorpusquerycv
1条回答
网友
1楼 · 发布于 2024-06-25 06:58:16

我要说的第一件事是Elasticsearch AFAIK中没有任何功能可以按照您想要的方式对结果进行排序。我将在下面概述一些我认为是黑客的东西,但我觉得最“合适”的解决方案是对每个搜索词运行单独的查询,并在客户端应用程序中合成Elasticsearch结果。因此,在您的示例中,将查询分为三个查询。Elasticsearch是一个分布式搜索引擎,根据您的设置,您可能有不同的服务器来处理每个组成查询,并行提交这些多个查询仍然可以为您提供良好的响应时间

也就是说,作为一种选择,这里有一个可能对你有用的黑客。黑客基本上是使用一个布尔查询,每个令牌在它自己的子句中,并使用不同的提升来优先匹配第一个令牌而不是第二个令牌,第二个令牌而不是第三个令牌。这并不能保证总是给你想要的顺序,但你可以玩助推器,并将它们设置为应该总是对你有用的东西:

GET observations_corpus/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "OBSERVATION.keyword": {
              "query": "RDW-CV=16.8%",
              "boost": 100
              "analyzer": "keyword_analyzer",
              "operator": "or",
              "fuzziness": 1
            }
          }
        },
        {
          "match": {
            "OBSERVATION.keyword": {
              "query": "WBC=9.010*3",
              "boost": 10
              "analyzer": "keyword_analyzer",
              "operator": "or",
              "fuzziness": 1
            }
          }
        },
        {
          "match": {
            "OBSERVATION.keyword": {
              "query": "RBC=3.2210*6",
              "analyzer": "keyword_analyzer",
              "operator": "or",
              "fuzziness": 1
            }
          }
        },
      ],
      "minimum_should_match" : 1
    }  
  }
}

相关问题 更多 >