大家好我是新來的彈性搜索,但我已經通過基本的ElasticSearch 5.1文檔。Elasticsearch使用多個過濾器搜索查詢
問題在一條線:
搜索是成功的,但過濾器不能正常工作。正如@Darth_Vader指出
映射數據類型
{
"properties": {
"title": {"type": "string"},
"description": {"type": "string"},
"slug": {"type": "string"},
"course_type": {"type": "string", "index" : "not_analyzed"},
"price": {"type": "string"},
"categories": {"type": "keyword", "index" : "not_analyzed"},
"tags": {"type" : "keyword"},
// "tags": {"type" : "keyword", "index" : "not_analyzed"},
"status": {"type" : "string","index" : "not_analyzed"},
}
}
我試圖映射爲好。以下是我的映射
文檔索引(REQ-1)
....
{
"_index": "learnings",
"_type": "materials",
"_id": "582d9xxxxxxxx9b27fab2c",
"_score": 1,
"_source": {
"title": "Mobile Marketing",
"slug": "mobile-marketing",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla eleifend hendrerit vehicula.",
"categories": [
"Digital Marketing"
],
"tags": [
"digital-marketing",
"mobile-marketing"
],
"status": "published"
}
},
...
就像上面我有一個像數百個文檔的索引
搜索足本,我使用
"query": {
"bool": {
"must": {
"multi_match" : {
"query" : "mobile",
"fields" : [ "title^5", "tags^4", "categories^3" ],
"operator": "and"
}
},
"filter": {
"bool" : {
"must" : [
{"term" : {"status": "published"} }
]
}
}
}
}
在上面的查詢中,最重要的搜索條件/過濾器是
{"term" : {"status": "published"} }
。每一個搜索結果都必須符合這個 的要求。現在從結果列表中,我想篩選更多。所以說我只想得到
documents
其中有mobile-marketing
作爲tag
。我的文檔(REQ-1)有這個tag
(mobile-marketing
)
現在的問題是:
如果我修改我的搜索查詢並添加我的要求過濾如下所示:儘管我的文檔(Req-1)有(即使我的文檔沒有搜索結果(點擊率= 0) 0作爲tag
"filter": {
"bool" : {
"must" : [
{"term" : {"status": "published"} },
{"term" : {"tags": "mobile-marketing"} }
]
}
}
BUT如果我改變濾波器
{"tags": "mobile-marketing"}
TO{"tags": "mobile"}
時,得到需要的文件(REQ-1)作爲結果。
我想獲得使用此過濾器相同的文檔:{"tags": "mobile-marketing"}
。那麼我在哪裏做錯了?
我的搜索查詢需要哪些修改?
感謝
[對於有類似問題的人]。上面的程序和相關的代碼工作,請確保您在映射和其他相關操作時使用正確的索引名稱和索引類型。 –