弹性搜索:从字段的开头到结尾完全匹配查询值



>我在字段值的完全匹配查询方面遇到问题。标题性别- 索引文档的字段

query: {
query_string: {
query: "box AND gender:"women"",
default_field: "title"
}
}

我使用双引号来匹配性别的完整查询。但是,如果有性别"男人,女人">的标题为"盒子",它也会在结果中。我知道,弹性搜索不支持字符串开头和结尾的正则表达式字符 ^ 和 $,所以我无法/^women$/

如果我想要的文档只匹配"女性">性别,而不是"男性,女性",我需要做什么?

问:

如果我想要的文档只匹配"女性"性别,而不是"男性,女性",我需要做什么?

对于精确搜索,应使用术语查询,而不是像query_string那样的全文搜索查询。因此,要获得与性别 == 女性完全匹配的所有文档,您应该这样做:

GET your-index/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"gender.keyword": {
"value": "women"
}
}
}
]
}
}
}

请注意,此查询假定性别字段也映射为关键字。

要完成查询,您需要添加另一个必须子句,以获取标题字段中有的所有文档女性作为性别字段的值。

GET your-index/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"gender.keyword": {
"value": "women"
}
}
},
{
"match": {
"title": "box"
}
}
]
}
}
}

谢谢你,get_install_skill。关键字完成了这项工作,但有一些补充。

总结这是解决方案:

query: {
bool: {
must: {
query_string: {
query: "box",
default_field: "title"
}
},
filter: {
bool: {
should: [
{term: {"gender.keyword": "women"}}
]
}
}
}
}

如果需要,我需要作为搜索多个性别的数组。例如,某些文档具有男女皆宜的性别,例如"女性,男性" 具有多种性别的示例:

query: {
bool: {
must: {
query_string: {
query: "box",
default_field: "title"
}
},
filter: {
bool: {
should: [
{term: {"gender.keyword": "women"}},
{term: {"gender.keyword": "kids"}} 
#summary it may be gender 'girls'
]
}
}
}
}

最新更新