我目前正在尝试编写一个Elasticsearch查询,该查询必须不区分大小写,并在其末尾使用通配符,并且它必须在Token而不是纯文本上运行。我尝试使用WildcardQuery,但似乎并没有查询令牌。如果除了ElasticSearch文档之外,还有其他人在哪里可以找到更多信息,我将不胜感激。
我当前的查询:
SearchSourceBuilder search = SearchSourceBuilder.searchSource()
.size(0)
.query(QueryBuilders.wildcardQuery("myProperty", "*" + term + "*"))
.aggregation(AggregationBuilders
.terms("byBrand")
.field("myProperty")
.size(3));
答案 0 :(得分:1)
尝试query_string
。它使用allowing for a wildcard,但老实说,从ES的角度来看,将通配符作为第一个元素(SQL运行匹配的方式)是错误的方式。我的意思是,它可以工作,但是性能可能不是最好的。 ES是搜索引擎,而不是数据库,请考虑使用分析器创建可以与您的搜索字符串匹配的令牌。例如,使用ngrams
to split your text into tokens,然后使用terms
查询来搜索没有任何通配符的术语。