Elasticsearch Java api - 选择用于搜索混有特殊字符的文本的查询(John-son)

时间:2014-01-24 10:23:27

标签: java mongodb elasticsearch

我的db集合中有两个用户,这些名称是johnjohn-son,现在我正在尝试在db collection的所有字段中选择与我的搜索文本匹配的所有记录。例如,我的搜索文本是john,那么我的查询是使用elasticsearch java api

QueryBuilder queryBuilderForUserSearch = QueryBuilders.must(
        QueryBuilders.fieldQuery("_all", "*" + q + "*"));

工作正常。但是当我尝试使用像john-son这样的特殊字符文本进行搜索时,它会返回零记录。任何人都可以帮助我为什么会这样,请提供有特殊字符的选择文本的查询。

1 个答案:

答案 0 :(得分:1)

您遇到的问题与此问题大致相同:Elasticsearch wildcard search on not_analyzed field

首先,您真的不希望在查询中使用前导通配符。 Lucene必须遍历索引词典中的每个术语才能找到术语。这是术语数量的O(n),这非常昂贵。有关详细信息,请参阅此文章:http://www.found.no/foundation/elasticsearch-from-the-bottom-up/

这里可能发生的事情是john-son通过john - 分析器标记为sonstandard。因此,字典中没有john-son项用于匹配的通配符查询。