我在elasticsearch中有一个索引,Map如下:
/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
}
因此,每当我对字段标题进行匹配查询时,查询文本为字母数字(例如USD5),标题中包含数字值的所有记录都会作为结果的一部分返回。
例如,curl-xget'/price\u validity\u idx'-d'{“query”:{“match”:{“title”:“USD5”}}
输出:(删除elasticsearch元信息以获得紧凑性)
{
"title" : "16 USD product"
"validity": true
},
{
"title" : "USD 5 refill"
"validity": true
},
{
"title" : "10 USD"
"validity": false
}
但是,每当我对字段标题进行相同的匹配查询时,只要将数字作为查询文本(例如5),就会返回与数字匹配的特定记录。
当查询文本为字母数字(例如USD5)时,如何使其仅返回与精确数字值匹配的记录。由于某些业务限制,我将无法将Map类型更改为integer。另外,我将不能使用术语查询,因为字段也包含一些冗长的文本数据。
请帮忙,因为我是elasticsearch的新手。
使用的版本是elasticsearch-7.8.1
1条答案
按热度按时间1yjd4xko1#
标准分析器是默认分析器,如果未指定,则使用该分析器。生成的令牌是
usd
以及5
,因此所有匹配这些标记的文档都将匹配搜索查询。分析api
生成以下令牌:
您可以使用match\短语查询来分析文本,并从分析的文本中创建短语查询。
搜索查询:
搜索结果:
编辑1:
您甚至可以将匹配查询与运算符一起使用
AND
,即用于解释查询值中文本的布尔逻辑