elasticsearch 当查询文本为字母数字模式时,Elasticsearch将返回所有记录,elasticsearch,search,full-text-search,elastic-stack,analyzer,elasticsearch,Search,Full Text Search,Elastic Stack,Analyzer" /> elasticsearch 当查询文本为字母数字模式时,Elasticsearch将返回所有记录,elasticsearch,search,full-text-search,elastic-stack,analyzer,elasticsearch,Search,Full Text Search,Elastic Stack,Analyzer" />

elasticsearch 当查询文本为字母数字模式时,Elasticsearch将返回所有记录

elasticsearch 当查询文本为字母数字模式时,Elasticsearch将返回所有记录,elasticsearch,search,full-text-search,elastic-stack,analyzer,elasticsearch,Search,Full Text Search,Elastic Stack,Analyzer,我在Elasticsearch中有一个索引,映射如下: /price_validity_idx { "mappings": { "properties": { "title":{ "type": "text" }, "validity":{ "type": "bool

我在Elasticsearch中有一个索引,映射如下:

/price_validity_idx

{
  "mappings": {
    "properties": {
      "title":{
        "type": "text"
      },
      "validity":{
        "type": "boolean"
      }
    }
  }
}
存储在该索引中的数据如下所示:

{
 "title" : "16 USD product"
"validity": true
}
{
 "title" : "USD 5 refill"
"validity": true
}
.....
{
 "title" : "10 USD"
"validity": false
},
{
"title" : "Movies on Demand-Free of cost"
"validity": false
},
{
"title" : "One month subscription on Cash purchase"
"validity": true
}

因此,每当我对字段标题进行匹配查询时,查询文本为字母数字(如USD 5) 在标题中包含数值的所有记录都将作为结果的一部分返回

例如,curl-XGET'/price\u validity\u idx'-d'{“查询”:{“匹配”:{“标题”:“USD 5”}

输出:(删除elasticsearch元信息以获得紧凑性)

但是,每当我对字段title进行相同的匹配查询时,只要将数字作为查询文本(例如5),就会返回与数字匹配的特定记录

当查询文本为字母数字(如USD 5)时,如何使其仅返回与精确数字值匹配的记录。由于某些业务限制,我无法将映射类型更改为整数。此外,我将无法使用术语查询,因为该字段也包含一些较长的文本数据

请帮助我,因为我是Elasticsearch的新手


使用的版本是Elasticsearch-7.8.1

标准分析仪是默认分析仪,如果未指定,则使用该分析仪。生成的标记是
usd
5
,因此所有匹配这些标记的文档都将匹配搜索查询

分析API

GET/ _analyze
{
  "analyzer" : "standard",
  "text" : "USD 5"
}
生成以下令牌:

{
  "tokens": [
    {
      "token": "usd",
      "start_offset": 0,
      "end_offset": 3,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "5",
      "start_offset": 4,
      "end_offset": 5,
      "type": "<NUM>",
      "position": 1
    }
  ]
}
搜索结果:

{
  "query": {
    "match_phrase": {
      "title": "USD 5"
    }
  }
}
"hits": [
      {
        "_index": "64528215",
        "_type": "_doc",
        "_id": "2",
        "_score": 2.1446278,
        "_source": {
          "title": "USD 5 refill",
          "validity": true
        }
      }
    ]
编辑1:

{
  "query": {
    "match_phrase": {
      "title": "USD 5"
    }
  }
}
"hits": [
      {
        "_index": "64528215",
        "_type": "_doc",
        "_id": "2",
        "_score": 2.1446278,
        "_source": {
          "title": "USD 5 refill",
          "validity": true
        }
      }
    ]
您甚至可以与运算符
一起使用,这是一个
用于解释查询值中文本的布尔逻辑


@Shivam Som您是否有机会查看我的答案,期待得到您的反馈谢谢@Bhavya match_短语似乎可以解决问题。@Shivam Som感谢您接受我的答案,您也可以投票支持我的答案吗