【问题标题】:Elasticsearch : how to return the document with the exact word searched and not all documents that contain that word in an sentence?Elasticsearch:如何返回搜索到的确切单词的文档,而不是句子中包含该单词的所有文档?
【发布时间】:2021-05-31 16:40:09
【问题描述】:

我有一个名为“描述”的字段(类型文本)

我有 3 个文件。

doc1 描述 = “测试”

doc2 描述 = "测试 dsc"

doc3 description = "2021 测试说明"

案例 1- 如果我搜索“测试”,我只想要 doc1

案例 2- 如果我搜索“test dsc”,我只想要 doc2

CASE 3-如果我搜索“2021 test desc”,我只想要 doc3

但现在只有 CASE 3 有效

例如 CASE1 不工作。如果我尝试这个查询,我有所有 3 个文档

GET /myindex/_search
{
    "query": {
        "match" : {
            "Description" : "test"
        }
    }
}

谢谢

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您将在搜索中获取所有三个文档,因为默认情况下,elasticsearch 使用standard analyzer 来表示text 类型字段。这会将"2021 test desc" 标记为

    {
      "tokens": [
        {
          "token": "2021",
          "start_offset": 0,
          "end_offset": 4,
          "type": "<NUM>",
          "position": 0
        },
        {
          "token": "test",
          "start_offset": 5,
          "end_offset": 9,
          "type": "<ALPHANUM>",
          "position": 1
        },
        {
          "token": "desc",
          "start_offset": 10,
          "end_offset": 14,
          "type": "<ALPHANUM>",
          "position": 2
        }
      ]
    }
    

    因此,它将返回与上述任何标记匹配的所有文档。


    如果您想搜索需要更新索引映射的确切术语。

    您可以通过indexing the same field in multiple ways i.e by using multi fields.更新映射

    PUT /_mapping
    {
      "properties": {
        "description": {
          "type": "text",
          "fields": {
            "raw": {
              "type": "keyword"
            }
          }
        }
      }
    }
    

    然后再次重新索引数据。在此之后,您将能够使用文本类型的“description”字段和关键字类型的“description.raw”字段进行查询

    搜索查询:

    {
      "query": {
        "match": {
          "description.raw": "test dsc"
        }
      }
    }
    

    搜索结果:

    "hits": [
          {
            "_index": "67777521",
            "_type": "_doc",
            "_id": "2",
            "_score": 0.9808291,
            "_source": {
              "description": "test dsc"
            }
          }
        ]
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2015-12-11
      • 2020-08-27
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2011-08-12
      • 2012-10-22
      • 2014-06-25
      相关资源
      最近更新 更多