我有一个像这样的过滤查询
query: {
filtered: {
query: {
bool: {
should: [{multi_match: {
query: @query,
fields: ['title', 'content']
}
},{fuzzy: {
content: {
value: @query,
min_similarity: '1d',
}
}}]
}
},
filter: {
and: [
type: {
value: @type
}]
}}}
如果@type是一个字符串,那么工作正常,但如果@type是一个数组则不起作用。如何搜索多种类型?
答案 0 :(得分:3)
这很有用,但我对此并不满意:
filter: {
or: [
{ type: { value: 'blog'} },
{ type: { value: 'category'} },
{ type: { value: 'miscellaneous'} }
]
}
我想接受更好的答案
答案 1 :(得分:2)
您可以在搜索请求的网址中轻松指定多种类型,例如如果使用http://localhost:9200/twitter/tweet,user/_search
,则type
或标题中的_msearch
为documented here。
然后由Elasticsearch将这些内容添加为过滤器。
此外,由于本文所述原因,您通常希望使用bool
组合过滤器:all about elasticsearch filter bitsets
答案 2 :(得分:1)
这对我有用:
在filter参数中,将多个类型查询包装为布尔查询的应该子句
例如
{
"query": {
"bool": {
"must": {
"term": { "foo": "bar" }
},
"filter": {
"bool": {
"should": [
{ "type": { "value": "myType" } },
{ "type": { "value": "myOtherType" } }
]
}
}
}
}
}
由 dadoonet 建议,在Elasticsearch github问题Support multiple types in Type Query
中