[lucene] lucene对于多field如何精确查询?
widhor
2011-02-21
我是想做一个多域查询
比如在所有field中查询“开源 项目” 要求结果既含“开源”又含“项目” 但是“开源” 和“项目” 这两个关键字不一定要出现在同一个field中 用MultiFieldQueryPaser发现它是搜索出了所有含“开源”或者“项目”的条目 改变parser.setDefaultOperator(QueryParser.AND_OPERATOR);默认逻辑符为and后 又变成“开源” 和“项目” 这两个关键字必须在同一个字段中 都不符合要求 这种需求应该是很常见的吧,不知道别的人是怎么处理的? 难道要做成2个查询再and一下? |
|
illu
2011-02-22
建立一个全文检索字段 专门用于检索 把你需要检索的内容 全部放到这个字段中 只查这个字段就行了
|
|
tan8888
2011-05-18
不是吧 ,MultiFieldQueryParser 本来就可以多field 查询 ,例如 QueryParser qp = new QueryParser (filed[i],analyzer) ; 再用BooleanQuery.add 方法 合并几个query来达到查询目的
|
|
nobody2008
2011-05-24
用booleanQuery封装这两个MultiFieldQueryPaser,这两个MultiFieldQueryPaser分别查询“开源”、“项目”。
|
|
nobody2008
2011-05-25
nobody2008 写道 用booleanQuery封装这两个MultiFieldQueryPaser,这两个MultiFieldQueryPaser分别查询“开源”、“项目”。
否定一下自己,上面的回答欠考虑了。 这个问题可以用Queryfilter解决,伪代码: Query query1,query2; …… Filter filter=new QueryFilter(query1); searcher.search(query2,filter); |
|
aunox
2011-05-27
import org.wltea.analyzer.lucene.IKQueryParser;
BooleanClause.Occur[] flags = new BooleanClause.Occur[] {BooleanClause.Occur.MUST, BooleanClause.Occur.MUST }; query = IKQueryParser.parseMultiField(new String[] { "CompanyName","MainProductOrService" }, keyword, flags); // 搜索相似度最高的5条记录 TopDocs topDocs = isearcher.search(query, 5); |