2015-03-18 48 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" 
    } 
    } 
} 

然后你可以在“井号标签”执行词语查询一个确切的字符串匹配,包括“#”字符。

如果您希望“标签标签”也被标记,那么您总是可以为“标签标签”创建一个多字段。