我在 Elasticsearch 中有以下文档数据结构:
{
"topics": [ "a", "b", "c", "d" ]
}
Run Code Online (Sandbox Code Playgroud)
我有一个选择列表,用户可以在其中过滤要显示的主题。当用户对他们的过滤器没问题时,他们将看到所有包含他们在数组“主题”中选择的任何主题的文档
我试过查询
{
"query": {
"terms": {
"topics": ["a", "b"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这不会返回任何结果。
扩展查询。例如,列表["a", "b"]将匹配下面数组中的第一个、第二个和第三个对象。
在 Elasticsearch 中是否有一个很好的方法来做到这一点?显然我可以做多个“匹配”查询,但这很冗长,因为我有数百个主题
编辑:我的映射
{
"fb-cambodia-post": {
"mappings": {
"scrapedpost": {
"properties": {
"topics": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如@Filip cordas 提到的,你可以使用topic.keywordlike。
{
"query": {
"terms": {
"topics.not_analyzed": [
"A" , "B"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将进行case sensitive搜索。它将寻找完全匹配。如果你想case-insensitive搜索,你可以使用query_string:
{
"query": {
"query_string": {
"default_field": "topics",
"query": "A OR B"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7280 次 |
| 最近记录: |