我尝试使用Elasticsearch返回在两个字段中具有不同字词的文档。不知道怎么写这个会是这样的:
/var/folder
理想情况下,术语集是字符串数组。我希望所有术语和字段命中都是ORed,这样最好的文档会在每个字段中都有所有匹配,但如果任何字段没有,那就没问题。
答案 0 :(得分:1)
您可以尝试尝试类似下面的查询。这是一个非常简单的查询,可以查找文档,其field1
匹配term set one
或field2
匹配very different term set two
。你不需要指定一个术语数组,因为ES会在分析阶段为你做这件事,即它需要term set one
并将其分解为标记term
,{{ 1}}和set
并将其与one
匹配。同样,对于field1
。
另请注意,我已经指定了field2
运算符,即使它是默认的,只是为了说明存在or
,您是否也需要它。
and
尝试一下,让我们知道它是怎么回事。
答案 1 :(得分:1)
您可以使用Terms Query
和bool should
来实现此目标,假设您希望在不进行分析的情况下匹配精确值。 Terms Query
的美妙之处在于它隐含地使用了一组值,它隐含地是一个OR
操作。
{
"query": {
"bool": {
"should": [
{
"terms": {
"field1": [
"field1 value1",
"field1 value2",
"field1 value3"
]
}
},
{
"terms": {
"field2": [
"field2 value1",
"field2 value2",
"field2 value3"
]
}
}
]
}
}
}