Lucene复合查询搜索
问题描述:
我想在lucene索引中查询一些交集。Lucene复合查询搜索
数据:
场FIELD1 FIELD2 FIELD3
ROW ID1 VALUE1 VALUE2
ROW ID2 VALUE3 VALUE4
ROW ID3 VALUE4值5
ROW ID3 VALUE6值5
查询: (FIELD2:VALUE4 AND FIELD3:值5)( INTERSECT ON FIELD1)(FIELD2:VALUE4 AND FIELD3:VALUE5)
所以我的最终结果应该是ID3。
任何输入都会有很大的帮助。
在此先感谢。
答
我DONOT明白你正在尝试做的,有在那里没有交集
如果u的意思是问我如何做Lucene索引复合搜索(AND),见下文
TermQuery tq1= new TermQuery(new Term("VALUE4", FIELD2));
TermQuery tq2= new TermQuery(new Term("VALUE5", FIELD3));
// BooleanClauses Enum SHOULD says Use this operator for clauses that should appear in the matching documents.
BooleanQuery bq = new BooleanQuery();
bq.add(tq1,BooleanClause.Occur.SHOULD);
bq.add(tq2,BooleanClause.Occur.SHOULD);
IndexSearcher searcher = new IndexSearcher(index, true);
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
//Iterate Collector hits
//process HitCollector or whatever terms, results,etc
编辑:
//Parser meant for using all the fields used for search
MultiFieldQueryParser multiQueryParser = new MultiFieldQueryParser(
searchFields, ANALYZER_NAME);
multiQueryParser.setDefaultOperator(QueryParser.AND_OPERATOR);
//You need to build something like this
Query query1 = new TermQuery(HEADER,"HEADER_01");
Query query2 = new TermQuery(XYZ_FIELD,"XYZ");
Query query3 = new TermQuery(HEADER,"HEADER_02");
Query query4 = new TermQuery(XYZ_FIELD,"ABC");
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(query1, BooleanClause.Occur.MUST);
booleanQuery.add(query2, BooleanClause.Occur.MUST);
booleanQuery.add(query3, BooleanClause.Occur.MUST);
booleanQuery.add(query4, BooleanClause.Occur.MUST);
//Search the index
答
让我在里面添加一些更多的数据。
PRODUCT_ID|HEADER_ID|HEADER_VALUE
PRODUCT_01|HEADER_01|XYZ
PRODUCT_02|HEADER_02|XYZ
PRODUCT_02|HEADER_03|ABC
PRODUCT_03|HEADER_03|ABC
现在,从我的UI想我选择标题为:
HEADER_02与价值XYZ
和
HEADER_03与价值ABC
我应该理想地得到(预期产品其值为XYZ的header_id 02,03与ABC匹配)作为结果的PRODUCT_02。我真的不知道查询中的产品。
如果我用OR查询,我会得到PRODUCT_02以及PRODUCT_03,这将是错误的。 如果我使用AND进行查询,我将得不到任何东西,因为Lucene会以一次一个文档的方式运行。
我希望这个时候我的问题是描述性的。
这对您的回复。 :)
Lucene核心是在Java中,所以你可以相应地标记它 – Narayan 2011-03-21 14:09:53