Lucene分词查询

chenyuanbin26 发布于 2012/06/13 20:36
阅读 1K+
收藏 3

在使用Lucene进行分词查询时遇到如下需求:

当用户输入“李宁 羽毛球”时,需要查出数据库中同时满足“李宁”和“羽毛球”两个条件的商品记录(即要求应该是与的关系)。

在项目中使用的是IKAnalyzer分词器,但是查出来的结果是却是或的关系,即查询出的结果可能只“李宁”或者“羽毛球”的记录,比如会出现“胜利羽毛球“相关的记录或者“李宁球鞋”相关的记录。

这样的问题如何解决?在Lucene中如何进行“与查询”?

 

加载中
0
Andre.Z
Andre.Z
Analyzer analyzer=new IKAnalyzer();
QueryParser qp = new QueryParser(Version.LUCENE_35, fieldName, analyzer);
qp.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query = qp.parse(keyWord);

analyzer就是IK的了,上面除了这个是IK的,其余都是lucene的,setDefaultOperator(QueryParser.AND_OPERATOR)就搞定分词后的“与”了,IK只是用来分词,查还是lucene自己去查的好。
上面只到Query,后面怎么继续应该不用我说了吧,还是上面说的,IK只是用来分词。。。

1
红薯
红薯
与查询:
BooleanQuery complexQuery = new BooleanQuery();
complexQuery.add(query1, BooleanClause.Occur.MUST);
complexQuery.add(query2, BooleanClause.Occur.MUST);
小薇
小薇
红薯这个是多个查询域的与关系查询,分词的与查询还是和上面那个同学说的~
0
t
thinkingfuture
应该是自定义分词规则吧
0
chenyuanbin26
chenyuanbin26

引用来自“Andre.Z”的答案

Analyzer analyzer=new IKAnalyzer();
QueryParser qp = new QueryParser(Version.LUCENE_35, fieldName, analyzer);
qp.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query = qp.parse(keyWord);

analyzer就是IK的了,上面除了这个是IK的,其余都是lucene的,setDefaultOperator(QueryParser.AND_OPERATOR)就搞定分词后的“与”了,IK只是用来分词,查还是lucene自己去查的好。
上面只到Query,后面怎么继续应该不用我说了吧,还是上面说的,IK只是用来分词。。。

嗯,谢谢。
0
东旭nginx
东旭nginx

如何进行查询,主要是看你在拼接query条件的时候怎么使用条件组合方式。

除了需要注意进行索引创建所使用的分词和查询所使用的分词一致之外,到没别的了。

既然在使用lucene给你推荐个其他的,也许你以后会使用到,solr很不错的东西。

http://wiki.apache.org/solr/ 创建索引更简单,查询的时候,可以直接拼接条件用and和or这种形式

SolrQuery query = new SolrQuery();
query.setQuery("admindivCode:[" + down + " TO " + up+ "] AND name:" + business_name + "");

基于lucene的,放心使用!呵呵

 

 

chenyuanbin26
chenyuanbin26
谢谢推荐~
返回顶部
顶部