2015-03-18 46 views
0

使用彈性搜索的查詢DSL這是我當前如何構建我的查詢:彈性搜索:包括搜索#/#標籤導致

elastic_sort = [ 
     { "timestamp": {"order": "desc" }}, 
     "_score", 
     { "name": { "order": "desc" }}, 
     { "channel": { "order": "desc" }}, 
    ] 

    elastic_query = { 
    "fuzzy_like_this" : { 
      "fields" : [ "msgs.channel", "msgs.msg", "msgs.name" ], 
      "like_text" : search_string, 
      "max_query_terms" : 10, 
      "fuzziness": 0.7, 
     } 
    } 

    res = self.es.search(index="chat", body={ 
     "from" : from_result, "size" : results_per_page, 
     "track_scores": True, 
     "query": elastic_query, 
     "sort": elastic_sort, 
    }) 

我一直在試圖實現一個過濾器或分析儀,將允許在搜索中包含「#」(我希望搜索「#」以返回包含「#」的結果),但是我的意圖很簡短。我收到的錯誤信息並沒有幫助,只是告訴我我的查詢格式不正確。

我試圖合併這裏找到的方法:http://www.fullscale.co/blog/2013/03/04/preserving_specific_characters_during_tokenizing_in_elasticsearch.html但它在我的上下文中沒有任何意義。

有沒有人有線索我可以做到這一點?

回答

1

您是否爲您創建了映射索引?您可以在映射中指定不分析某些字段。

例如,鳴叫映射可以是這樣的:

"tweet": { 
    "properties": { 
    "id": { 
     "type": "long" 
    }, 
    "msg": { 
     "type": "string" 
    }, 
    "hashtags": { 
     "type": "string", 
     "index": "not_analyzed" 
    } 
    } 
} 

然後你可以在「井號標籤」執行詞語查詢一個確切的字符串匹配,包括「#」字符。

如果您希望「標籤標籤」也被標記,那麼您總是可以爲「標籤標籤」創建一個多字段。