Elasticsearch 针对两个字段的两组术语
Elasticsearch two sets of terms against two fields
我正在尝试使用 Elasticsearch 来 return 在两个领域有不同术语的文档。不知道怎么写,应该是这样的:
query:
field1: "term set #1"
field2: "very different term set #2"
理想情况下,术语集应该是字符串数组。我希望对所有术语和字段匹配进行 ORed,以便最好的文档在每个字段中都有所有匹配,但如果任何字段有 none,那没问题。
您可以先尝试类似下面的查询。这是一个非常简单的查询,将查找 field1
匹配 term set one
或 field2
匹配 very different term set two
的文档。您不需要指定术语数组,因为 ES 会在分析阶段在幕后为您完成,即它将采用 term set one
并将其分解为标记 term
、set
和 one
并将它们与 field1
进行匹配。同样,对于 field2
。
另请注意,我已经指定了 or
运算符,尽管它是默认运算符,只是为了说明还有一个 and
,您在某些时候是否需要它。
{
"query": {
"bool": {
"should": [
{
"match": {
"field1": "term set one",
"operator": "or"
}
},
{
"match": {
"field2": "very different term set two",
"operator": "or"
}
}
],
"minimum_should_match": 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"
]
}
}
]
}
}
}
我正在尝试使用 Elasticsearch 来 return 在两个领域有不同术语的文档。不知道怎么写,应该是这样的:
query:
field1: "term set #1"
field2: "very different term set #2"
理想情况下,术语集应该是字符串数组。我希望对所有术语和字段匹配进行 ORed,以便最好的文档在每个字段中都有所有匹配,但如果任何字段有 none,那没问题。
您可以先尝试类似下面的查询。这是一个非常简单的查询,将查找 field1
匹配 term set one
或 field2
匹配 very different term set two
的文档。您不需要指定术语数组,因为 ES 会在分析阶段在幕后为您完成,即它将采用 term set one
并将其分解为标记 term
、set
和 one
并将它们与 field1
进行匹配。同样,对于 field2
。
另请注意,我已经指定了 or
运算符,尽管它是默认运算符,只是为了说明还有一个 and
,您在某些时候是否需要它。
{
"query": {
"bool": {
"should": [
{
"match": {
"field1": "term set one",
"operator": "or"
}
},
{
"match": {
"field2": "very different term set two",
"operator": "or"
}
}
],
"minimum_should_match": 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"
]
}
}
]
}
}
}