lucene忽略除默认字段以外的字段的查询

时间:2009-08-12 16:08:33

标签: java lucene

我有2个索引,一个用于元数据,一个用于文本,我希望能够删除查询中的所有字段搜索,并且只使用用户搜索的默认字段,即“help AND title:carpool”i只想要帮助部分,想法?

2 个答案:

答案 0 :(得分:1)

遍历BooleanQuery树并删除与Term(“help”)相关的条目

答案 1 :(得分:1)

这是您的代码应该是什么样子的大概:

public static void removeNonDefault(BooleanQuery query, String defaultField) {
    List<BooleanClause> clauses = (List<BooleanClause>)query.clauses();
    Iterator<BooleanClause> iter = clauses.iterator();
    while(iter.hasNext()) {
        BooleanClause clause = iter.next();
        Query subQuery = clause.getQuery();

        if(subQuery instanceof BooleanQuery) {
            removeNonDefault((BooleanQuery)subQuery, defaultField);

        } else if(subQuery instanceof TermQuery) {
            if (!((TermQuery) subQuery).getTerm().field().equals(defaultField)) {
                iter.remove();
            }

        }
    }
}

这样做是使用TermQuery中的非默认字段删除BooleanQuery,然后递归到子布尔查询。

请注意,此代码不完整。根据您的具体情况,您可能需要担心更多类型的查询,例如词组查询和常量得分范围查询。

确保在调用此函数之前执行query.rewrite(),将任何通配符查询转换为布尔查询。