我試圖用Elasticsearch返回那些在兩個領域的不同方面的文檔。不知道如何寫這將是這樣的:Elasticsearch兩套條款對兩個領域
query:
field1: "term set #1"
field2: "very different term set #2"
理想情況下,術語集是字符串數組。我希望所有術語和字段匹配都是ORed,所以最好的文檔會在每個字段都有所有匹配,但是如果任何字段沒有匹配,那就沒問題。
我試圖用Elasticsearch返回那些在兩個領域的不同方面的文檔。不知道如何寫這將是這樣的:Elasticsearch兩套條款對兩個領域
query:
field1: "term set #1"
field2: "very different term set #2"
理想情況下,術語集是字符串數組。我希望所有術語和字段匹配都是ORed,所以最好的文檔會在每個字段都有所有匹配,但是如果任何字段沒有匹配,那就沒問題。
您可以使用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"
]
}
}
]
}
}
}
您可以嘗試類似下面的查詢開始。這是一個非常簡單的查詢,將找到的文檔,其field1
比賽term set one
OR field2
比賽very different term set two
。因爲ES會在分析階段期間爲您提供,所以您不需要指定術語數組,因爲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
}
}
}
試試看,讓我們知道它是怎麼回事。
這看起來八九不離十。他們不是文字術語,所以我不希望他們通過分析儀。我需要像Solr多值字段 – pferrel
這看起來像答案。我不想要分析器。這些術語不是來自文本,也不應該在查詢或ES存儲中進行標記。爲了確保分析器不用於查詢或查看術語,所以我需要做其他任何事情,也許在索引配置? – pferrel
一個相關的問題是如何將文檔術語插入爲數組而不是字符串。 – pferrel