如何在ElasticSearch中建立不区分大小写的通配符查询?

时间:2018-07-11 09:11:52

标签: java elasticsearch

我目前正在尝试编写一个Elasticsearch查询,该查询必须不区分大小写,并在其末尾使用通配符,并且它必须在Token而不是纯文本上运行。我尝试使用WildcardQuery,但似乎并没有查询令牌。如果除了ElasticSearch文档之外,还有其他人在哪里可以找到更多信息,我将不胜感激。

我当前的查询:

SearchSourceBuilder search = SearchSourceBuilder.searchSource()
        .size(0)
        .query(QueryBuilders.wildcardQuery("myProperty", "*" + term + "*"))
        .aggregation(AggregationBuilders
            .terms("byBrand")
            .field("myProperty")
            .size(3));

1 个答案:

答案 0 :(得分:1)

尝试query_string。它使用allowing for a wildcard,但老实说,从ES的角度来看,将通配符作为第一个元素(SQL运行匹配的方式)是错误的方式。我的意思是,它可以工作,但是性能可能不是最好的。 ES是搜索引擎,而不是数据库,请考虑使用分析器创建可以与您的搜索字符串匹配的令牌。例如,使用ngrams to split your text into tokens,然后使用terms查询来搜索没有任何通配符的术语。