我想在数组中搜索确切的字符串。 我在ES中的数据如下:
{ category": [
"abc test"
],
"es_flag": false,
"bullet_points": [],
"content": "",
"description": false }
我有多个类别,如“abc test”,“new abc test”等...
我正在尝试下面的查询但是我得到了多个类别的结果,我正在搜索“abc test”但是“new abc test”类别也会出现在结果中。
{
"from": 0,
"size": 30,
"query": {
"bool" : {
"must": [
{ "match_phrase": { "category": "abc test" } }
]
}
},
"sort": [ { "createdAt": { "order": "desc" } } ]
}
帮助将不胜感激。
答案 0 :(得分:0)
我假设您正在使用默认分析器。在这种情况下,针对match_phrase
的{{1}}将匹配所有具有相邻令牌"field": "abc test"
的字段的文档,包括:
abc test
new abc test
abc test new
它不匹配:
foo abc test bar
- 查询令牌不相邻abc new test
- 查询令牌相邻,但顺序错误对您的字段使用test abc
分析器实际上有什么帮助(您需要从头开始构建新索引或更新映射)。如果你是用scrach构建的:
keyword
然后你需要使用简单的查询,例如像这样(curl -XPUT http://localhost:9200/my_index -d '
{
"mappings": {
"categories": {
"properties": {
"category": {
"type": "text",
"analyzer": "keyword"
}
}
}
}
}'
或match
会这样做):
term
答案 1 :(得分:0)
我的elasticsearch版本是6.0.1。我正在使用这种方法:
GET <your index>/_search
{
"query": {
"bool": {
"must": [{
"query_string": {
"query": "category:abc OR category:test"
}
}]
}
},
"sort":[{"createdAt": {
"order": "desc"
}}]
}