elasticsearch matchquery返回错误的结果

bbmckpt7  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(356)

我用的是 matchQuery 在java中查询elasticsearch。以下是我的疑问: sourceBuilder.query(QueryBuilders.matchQuery("TransactionId_s","BulkRunTest.20Nov20201446.00")); 田野 TransactionId_s 不是一个 keyword . 我希望matchquery与我给出的字符串完全匹配并返回结果。elasticsearch中不应存在具有 TransactionId_s 作为 BulkRunTest.20Nov20201446.00 . 但是我得到了一些结果,他们有 TransactionId_s 如下所示:

"TransactionId_s" : "BulkRunTest.17Sep20201222.00"
"TransactionId_s" : "BulkRunTest.22Sep20201450.00"
"TransactionId_s" : "BulkRunTest.20Sep20201250.00"

当我试着用 termQuery 而不是 matchQuery ,我得到0个结果,这是预期的结果。我想 matchQuery 允许我查询给定值的任何字段,而不必担心标记化。我错了吗?我该如何解决我看到的问题?
任何帮助都将不胜感激。谢谢您。

lskq00tm

lskq00tm1#

Match 查询被分析,即它应用了相同的分析器,在索引时在字段上使用,您可以分析api,并查看索引和搜索项的标记。
考虑到你有一个 text 字段,它将为搜索项生成以下标记 BulkRunTest.20Nov20201446.00 ```
POST /_analyze
{
"analyzer" : "standard",
"text" : "BulkRunTest.20nov20201446.00"
}

和生成的代币

{
"tokens": [
{
"token": "bulkruntest", // notice this token
"start_offset": 0,
"end_offset": 11,
"type": "",
"position": 0
},
{
"token": "20nov20201446.00",
"start_offset": 12,
"end_offset": 28,
"type": "",
"position": 1
}
]
}

现在让我们看看其中一个匹配的令牌 `BulkRunTest.17Sep20201222.00` ```
POST /_analyze
{
    "analyzer" : "standard",
    "text" : "BulkRunTest.17Sep20201222.00"
}

和生成的代币

{
    "tokens": [
        {
            "token": "bulkruntest", // notice same token 
            "start_offset": 0,
            "end_offset": 11,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "17sep20201222.00",
            "start_offset": 12,
            "end_offset": 28,
            "type": "<ALPHANUM>",
            "position": 1
        }
    ]
}

如你所见 bulkruntest 在索引项和搜索项中都是相同的标记,因此匹配查询返回搜索结果,而在另一个索引文档中也是相同的。
如果使用默认的自动生成Map .keyword 子字段,则可以使用 .keyword 用于精确搜索的字段。
工作示例

{
  "query": {
    "term": {   // term query
      "TransactionId_s.keyword": {   // .keyword subfield is used
        "value": "BulkRunTest.20Nov20201446.00"
      }
    }
  }
}

和搜索结果

"hits": [
            {
                "_index": "test_in",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.6931471,
                "_source": {
                    "TransactionId_s": "BulkRunTest.20Nov20201446.00"
                }
            }
        ]

相关问题