关于lucene的分词和查询
jiqiumin
2008-06-04
英文是没法实现的说的那样分的,字母貌似是输入时就要有空格,中文的话分词器会帮你按词库去分的或者你用的是一元,2元就会按字跟词区分
|
|
zhjt_88
2008-06-04
http://so.mdbchina.com caocao写的这个搜索,我一直在看,他写的不错,
|
|
zhjt_88
2008-06-04
我也是分词以后用BooleanQuery:这个你分词以后得到每个Term项,然后组合BooleanQuery来搜索吗?
|
|
wifivein
2008-06-04
zhjt_88@163.com 写道 我也是分词以后用BooleanQuery:这个你分词以后得到每个Term项,然后组合BooleanQuery来搜索吗?
得看具体的需求了,逻辑比较简单的情况下我确实是这么做的 即便交给QueryParser,它做的也是一样的事情——只是它处理复杂逻辑比较方便罢了 |
|
zhjt_88
2008-06-04
我举一个例子,比如我用单字分词,索引的内容是 爱的敬意、爱的致意,我搜爱的敬意,两个都能出来,这个怎么写呢
|
|
wifivein
2008-06-04
zhjt_88@163.com 写道 我举一个例子,比如我用单字分词,索引的内容是 爱的敬意、爱的致意,我搜爱的敬意,两个都能出来,这个怎么写呢
分词之后用“或”逻辑就能出来... ![]() 当然实际应用里不能这么做(会出来太多结果),我觉得可能是让分词结果部分匹配——具体什么规则那是算法问题,不是Lucene的问题了 Lucene倒是也有个FuzzyQuery的模糊查询,你可以试一下(影响性能..) |
|
zhjt_88
2008-06-04
恩,谢谢,说道底还是分词
|
|
shadowlin
2008-06-24
ls的你说mdbchina的搜索是caocao写的?有他的联系方式么?
|
|
moshalanye
2008-07-02
查询分词 针对单字,应该是在进行词库分词 和润词之后 剔除无用词 后 出现单字时才应该考虑的,出现单字的时候 最好是用 TermQuery 直接进行单子完全匹配 ,不要做 prefixquery来做, 在词库分词和润词 建索引的时候始终遵循最大匹配 ,润次我推荐用3个字的,两个字的润词 对拼音容错 有比较大的限制 查询很大程度取决于索引 建立的时候 分词的合理性
|
|
frogking
2010-03-09
public List<Entity> search (String keyword, int number)
{ Analyzer analyzer = new MMAnalyzer(); QueryParser parser = new QueryParser("subject", analyzer); //”subject”为检索所依据的属性字段 org.apache.lucene.search.Query luceneQuery; try { luceneQuery = parser.parse(((MMAnalyzer)analyzer).segment(keyword," ")); // 先将关键字分词成以空格隔开的词组 FullTextSession fullTextSession = Search.createFullTextSession(getSession()); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery,Entity.class); // Entity.class获得持久化对象的Class int rowNum = fullTextQuery.getResultSize(); if(0 == rowNum) return null; if(rowNum <= number){ number = rowNum-1; } fullTextQuery.setFirstResult(0); fullTextQuery.setMaxResults(number); return fullTextQuery.list(); 具体可以参考这里:[url]http://www.phome.asia/forum/thread/22831.html [/url] |