這是elasticsearch 2.3上not_analyzed字符串數組精確匹配,跨多個領域
讓我們假設我有排序的映射:
索引1:
'title': {'type': 'string'},
'tags': {'type': 'string', 'index': 'not_analyzed'}
索引2:
'title': {'type': 'string'},
'tags': {'type': 'string', 'index': 'not_analyzed'},
'tag_special': {'type': 'string', 'index': 'not_analyzed'}
注意:當推送到index1和index2時,「tags」是一串字符串。在索引2中,「tag_special」只是一個字符串
我想完成的是一個查詢,我們在兩個索引之間進行查詢,首先查找索引1中標記數組中的確切匹配term
或單個字符串在index2中tag_special的值,並將這些匹配提升到堆頂部。那麼我想採取同樣的查詢,然後在兩個指標運行對標題字段正常match
查詢
例如文件
{
"_index": "index1",
"_type": "index1",
"title": "Test Doc 1",
"tags": ["tag-1", "tag-2"]
}
{
"_index": "index1",
"_type": "index1",
"title": "Test Doc 2",
"tags": ["tag-1"]
}
{
"_index": "index1",
"_type": "index1",
"title": "Test Doc 3",
"tags": ["tag-2", "tag-3"]
}
{
"_index": "index2",
"_type": "index2",
"title": "Test Doc inx2 1",
"tags": ["tag-1", "tag-2"],
"tag_special": "tag-1"
}
{
"_index": "index2",
"_type": "index2",
"title": "Test Doc inx2 2",
"tags": ["tag-2"]
}
{
"_index": "index2",
"_type": "index2",
"title": "Test Doc inx2 3",
"tags": ["tag-3"],
"tag_special": "tag-4"
}
絕對沒有我想是相當的工作了。
"query": {
"bool": {
"should": [
{"term": {"tags": "tag-2"}},
]
}
}
回報什麼,奇怪的是,但
"query": {
"bool": {
"should": [
{"match": {"tags": "tag-2"}},
]
}
}
回報太多(它會爲它的使用分析器返回的所有帖子,如果你尋找「標籤2」,然後搜索「標籤」以及「2」)
一旦我可以針對字符串數組項查詢,我需要提高的精確匹配的結果的頂部,然後利用針對標題領域的標準匹配
沒有任何術語查詢確實匹配任何內容應該沒問題,它們需要完全可選。因此,長期的比賽不能充當filters
或constant_score
,因爲我需要它有可能使一個正常的標題查詢並具有由得分值排序結果
我至今是
"query": {
"bool": {
"should": [
{"term": {"tags": "tag-2"}},
{"term": {"tag_special": "tag-2"}},
{"match": {"title": {"query": "tag-2", "operator": "and"}}}
],
}
}
但是就這一秒而言,沒有任何東西會被返回。使用multi_match
也似乎是,因爲它使用了匹配這條
我覺得什麼,我試圖完成實際上是非常簡單的,像這裏有只一個件事,我在想念這裏,和IM因爲經過數小時試驗和錯誤它快要退出時間了,我希望明天早上我能繼續下去哈哈
感謝您的時間!
嗨Hansika,是的,我的'tag'和'tag_special'字段是'not_analyzed'字符串類型。然而,如果我把我的查詢降低到僅僅匹配'tags'這個詞,我什麼也收不回來,就像分析字段一樣 – RedactedProfile
哦,jeez,我想到了...... – RedactedProfile