首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch :如何返回搜索的准确单词的文档,而不是句子中包含该单词的所有文档?

Elasticsearch :如何返回搜索的准确单词的文档,而不是句子中包含该单词的所有文档?
EN

Stack Overflow用户
提问于 2021-05-31 16:40:09
回答 1查看 109关注 0票数 0

我有一个名为“description”的字段(输入文本)

我有三个文件。

doc1 description =“测试”

doc2 description =“测试dsc”

doc3 description =“2021年测试指令”

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

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

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

但现在只有案例3起作用了

例如,CASE1不工作的.If我尝试这个查询,我有所有的3个文档

代码语言:javascript
复制
GET /myindex/_search
{
    "query": {
        "match" : {
            "Description" : "test"
        }
    }
}

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-31 16:48:27

在搜索中获取所有三个文档,因为在默认情况下,elasticsearch使用标准分析器作为text类型字段。这将将"2021 test desc"标记为

代码语言:javascript
复制
{
  "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
    }
  ]
}

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

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

您可以通过用多种方式对同一字段进行索引,即使用多个字段。更新映射

代码语言:javascript
复制
PUT /_mapping
{
  "properties": {
    "description": {
      "type": "text",
      "fields": {
        "raw": {
          "type": "keyword"
        }
      }
    }
  }
}

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

搜索查询:

代码语言:javascript
复制
{
  "query": {
    "match": {
      "description.raw": "test dsc"
    }
  }
}

搜索结果:

代码语言:javascript
复制
"hits": [
      {
        "_index": "67777521",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.9808291,
        "_source": {
          "description": "test dsc"
        }
      }
    ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67777521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档