elasticsearch Lucene中的ES匹配查询模拟,elasticsearch,lucene,full-text-search,elasticsearch,Lucene,Full Text Search" /> elasticsearch Lucene中的ES匹配查询模拟,elasticsearch,lucene,full-text-search,elasticsearch,Lucene,Full Text Search" />

elasticsearch Lucene中的ES匹配查询模拟

elasticsearch Lucene中的ES匹配查询模拟,elasticsearch,lucene,full-text-search,elasticsearch,Lucene,Full Text Search,我使用这样的查询在ES中运行: boolQuery.must(QueryBuilders.matchQuery("field", value).minimumShouldMatch("50%")) Lucene中这个查询的直接类比是什么?据我所知,匹配查询基本上是分析查询,并用分析器找到的所有术语创建布尔查询。您只需通过QueryParser传递文本,就可以接近 但你可以复制它如下: 公共静态查询makeMatchQuery(字符串字段名,字符串值)抛出IOException{ //让生成器开

我使用这样的查询在ES中运行:

boolQuery.must(QueryBuilders.matchQuery("field", value).minimumShouldMatch("50%"))

Lucene中这个查询的直接类比是什么?

据我所知,匹配查询基本上是分析查询,并用分析器找到的所有术语创建布尔查询。您只需通过
QueryParser
传递文本,就可以接近

但你可以复制它如下:

公共静态查询makeMatchQuery(字符串字段名,字符串值)抛出IOException{
//让生成器开始向其添加子句。
BooleanQuery.Builder qbuilder=新建BooleanQuery.Builder();
//我们需要分析该值,并获取一个令牌流以从中读取术语
Analyzer Analyzer=新的StandardAnalyzer();
TokenStream=analyzer.TokenStream(字段名,新的StringReader(值));
stream.reset();
//迭代令牌流,并将它们全部添加到我们的查询中
int countTerms=0;
while(stream.incrementToken()){
countTerms++;
查询术语查询=新术语查询(新术语(
字段名,
stream.getAttribute(chartermatAttribute.class.toString());
add(termQuery,BooleanClause.occurrent.SHOULD);
}
stream.close();
analyzer.close();
//最小值应该匹配的是子句计数,而不是百分比。因此,对于50%,计数/2
qbuilder.SetMinimumNumbers应匹配(countTerms/2);
Query finalQuery=qbuilder.build();
返回最终查询;
}

谢谢您的回复。请您给我一个提示,为什么我在尝试运行此请求时得到
无效\u语法\u无法\u解析
<代码>(firstname.ngram:Jo firstname.ngram:Joh firstname.ngram:oh firstname.ngram:ohn firstname.ngram:hn)~2@twoorogue-
~2
部分无效。看。