在多个字段上搜索lucene索引

时间:2012-01-17 10:37:33

标签: lucene query-parser

我有一个包含2个内容字段的索引(已分析,索引和存储):
例如:namehobbies。 (爱好字段可以使用不同的值添加多次)。

我有另一个仅用于过滤索引(un_analyzed& not stored)的字段:
例如:country_code

现在,我想构建一个查询,它将检索(尽可能)匹配某些“搜索”输入字段的文档,但只检索country_code具有某些确切值的文档。

用于构建此类查询的最合适的组合查询语法/查询解析器是什么。

2 个答案:

答案 0 :(得分:2)

为什么不从QueryParser开始,它可能适用于您的用例,并且需要最少的努力。

您的问题并不清楚,但我们假设您有一个输入字段('搜索')和国家/地区代码的组合框。然后,您将读取这些值并创建查询:

// you don't have to use two parsers, you can do this using one.
QueryParser nameParser = new QueryParser(Version.LUCENE_CURRENT, "name", your_analyzer);
QueryParser hobbiesParser = new QueryParser(Version.LUCENE_CURRENT, "hobbies", your_analyzer);

BooleanQuery q = new BooleanQuery();
q.add(nameParser.parser(query), BooleanClause.Occur.SHOULD);
q.add(hobbiesParser.parser(query), BooleanClause.Occur.SHOULD);BooleanClause.Occur.SHOULD);

/* Filtering by country code can be done using a BooleanQuery 
 * or a filter, the difference will be how Lucene scores matches. 
 * For example, using a filter:
 */
Filter countryCodeFilter = new QueryWrapperFilter(new TermQuery(new Term("country_code", )));

//and finally searching:
TopDocs topDocs = searcher.search(q, countryCodeFilter, 10);

答案 1 :(得分:2)

您可以使用以下查询:

country_code:india +(name:search_value OR hobbies:search_value)