我有一个索引如下:
"_source": {
"iD": "378",
"containsTerms": [
{
"containsTerm": "search term to match"
},
{
"containsTerm": "another search term to match"
},
{
"containsTerm": "etcetera"
}
],
"startdate": "2022-09-08T14:07:00",
"enddate": "2022-09-30T14:07:00"
}
其Map为:
"mappings":{
"properties":{
"containsTerms":{
"properties":{
"containsTerm":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
},
"enddate":{
"type":"date"
},
"startdate":{
"type":"date"
}
}
}
在索引上运行的以下查询按预期工作:
{
"query":{
"bool":{
"must":[
{
"match":{
"containsTerms.containsTerm":{
"query":"search term to match"
}
}
},
{
"range":{
"startdate":{
"lte":"2022-09-22T14:43:38"
}
}
},
{
"range":{
"enddate":{
"gte":"2022-09-22T15:43:38"
}
}
}
]
}
}
}
ElasticSearch返回所有部分搜索短语的文档。
- 搜索
- 搜索词
- 搜索词以
- 要匹配的搜索词
也适用于更大的短语。
- 搜索术语以匹配诸如此类的话
到目前一切尚好。
但是,要求只在完全匹配的情况下返回文档。将查询更改为使用关键字
{
"match":{
"containsTerms.containsTerm.keyword":{
"query":"search term to match"
}
}
}
确保只有搜索要匹配的搜索词才会返回文档。这个很好用。
- 然而*...要求返回的文档与包含在较大短语中的术语完全匹配。
例如:
“blah blah搜索项匹配blah blah”应该返回文档,而“blah blah搜索项匹配blah blah”不应该返回文档。
这几乎就像是,我们应该返回文档包含在搜索项中的结果,而不是返回包含在文档中的结果。
我甚至不确定这是否可能,或者使用哪种类型的查询。
1条答案
按热度按时间zyfwsgd61#
您可以使用
match_phrase
类型的查询,将短语匹配为大文本。“blah blah搜索项匹配blah blah”应该返回文档,而“blah blah搜索项匹配blah blah”不应该返回文档。
下面的问题将涵盖您的上述用例。
我希望当查询匹配到
containsTerms
对象的至少一个元素时,您希望获得整个文档。