Lucene中的ES Match查询模拟

双重流氓

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

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

在Lucene中,此查询的直接模拟是什么?

毫微微管

据我了解,匹配查询基本上是对查询进行分析,并从分析器找到的所有条件中创建一个布尔查询。只需将文本传递给,您就可以关闭排序QueryParser

但是您可以复制如下内容:

public static Query makeMatchQuery (String fieldname, String value) throws IOException { 
    //get a builder to start adding clauses to.
    BooleanQuery.Builder qbuilder = new BooleanQuery.Builder();

    //We need to analyze that value, and get a tokenstream to read terms from
    Analyzer analyzer = new StandardAnalyzer();
    TokenStream stream = analyzer.tokenStream(fieldname, new StringReader(value));
    stream.reset();

    //Iterate the token stream, and add them all to our query
    int countTerms = 0;
    while(stream.incrementToken()) {
        countTerms++;
        Query termQuery = new TermQuery(new Term(
                fieldname, 
                stream.getAttribute(CharTermAttribute.class).toString()));
        qbuilder.add(termQuery, BooleanClause.Occur.SHOULD);
    }
    stream.close();
    analyzer.close();

    //The min should match is a count of clauses, not a percentage. So for 50%, count/2
    qbuilder.setMinimumNumberShouldMatch(countTerms / 2);
    Query finalQuery = qbuilder.build();
    return finalQuery;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

grafana中的Elasticsearch Lucene查询

来自分类Dev

在Lucene中查找找到的查询的位置

来自分类Dev

Lucene中的不匹配文档查询对象

来自分类Dev

在lucene中查询*:value的含义是什么?

来自分类Dev

在Lucene中查找找到的查询的位置

来自分类Dev

在lucene中查询*:value的含义是什么?

来自分类Dev

Elasticsearch-Lucene查询中的必需术语

来自分类Dev

如何提高Lucene中的搜索查询效率?

来自分类Dev

lucene查询中的布尔运算

来自分类Dev

如何在查询中模拟点击动作

来自分类Dev

在服务模拟中获取查询参数

来自分类Dev

如何在查询中模拟点击动作

来自分类Dev

$match 中的嵌套布尔查询

来自分类Dev

如何从LINQ查询中获取生成的Lucene查询

来自分类Dev

Lucene查询语法中必需运算符的含义

来自分类Dev

在Elastic Search的本机脚本记分器中访问Lucene查询

来自分类Dev

Lucene中的正则表达式查询

来自分类Dev

Lucene中带有多个单词的通配符查询

来自分类Dev

在python中解析Lucene查询的正确方法是什么?

来自分类Dev

Lucene 4.5。在StringField中搜索多词查询

来自分类Dev

Lucene中的正则表达式查询

来自分类Dev

Lucene查询语法中AND和+有什么区别

来自分类Dev

Lucene查询语法中必需运算符的含义

来自分类Dev

Solr Lucene 查询中的禁用字符列表

来自分类Dev

在函数中模拟Propel查询(Symfony2)

来自分类Dev

Python使用pytest_mock在函数中模拟多个查询

来自分类Dev

在函数中模拟Propel查询(Symfony2)

来自分类Dev

多个MATCH查询中的不同节点

来自分类Dev

多个MATCH查询中的不同节点