使用LUCENE库在多个字段中搜索多个关键字

时间:2014-02-18 09:48:04

标签: lucene

我想在field1中搜索keyword1,在字段2中搜索keyword2 实际上这段代码完美无缺,但它给了我其中一个包含关键字的field1和field2的结果:

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_46, stopWordsSet );

String[] fields = { "field1", "field2"};
Float float10 = new Float(10);
Float float5 = new Float(5);
Map<String, Float> boost = new HashMap<String, Float>();
boost.put("nom", float10);
boost.put("email", float10);
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(Version.LUCENE_46,fields, analyzer, boost);
mfqp.setAllowLeadingWildcard(true); 
Query userQuery = mfqp.parse("*keyword*");

2 个答案:

答案 0 :(得分:0)

您的问题似乎是在 field1和field2中查找包含'keyword'的文档。如果这是正确的,以下可能会有所帮助。注意默认运算符为OR时需要的+符号。

Query userQuery = mfqp.parse("+field1:*keyword* +field2:*keyword*")

答案 1 :(得分:0)

如果要在field1中找到包含keyword1的文档,在field2中找到包含keyword2的文档,那么布尔查询可能会有所帮助:

BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term("field1", "keyword1")), BooleanClause.Occur.MUST);
query.add(new TermQuery(new Term("field2", "keyword2")), BooleanClause.Occur.MUST);