使用Lucene 5.5在一个句子中搜索短语

时间:2016-03-31 05:00:11

标签: search lucene

目的:建立一个字典(取自Gutenberg项目的样本字典)。该应用程序应该能够返回" word"是提供意义的一部分。例如:

CONSOLE Con * sole",v.t。 [小鬼。 &安培; P.P.安慰; p.pr. &安培; vb.n.安慰。] Etym:[L。 consolari ,. P.P. consolatus; con + solari控制台,舒适:cf。 F.慰问者。见Solace。]

Defn:为痛苦或沮丧而欢呼;减轻悲伤,提高精神;缓解安慰;抚慰。空头控制台空声。教皇。基督的宗教遭到所有智慧和哲学家的徒劳攻击,并且其胜利已经完成,这让我深感安慰。 P. Henry。

Syn的。 - 安慰;慰藉;抚慰;欢呼;支持;鼓励;支持。见舒适。

所以,如果我的问题是"为了在痛苦中加油,那么它应该让我回答"控制台"作为输出。

我正在尝试使用Lucene 5.5构建此工具(较低版本目前尚未胜任)。这就是我试过的:

索引:

Document doc = new Document();<br>
doc.add(new Field(MEANING, meaningOfWord, Store.YES, Field.Index.ANALYZED));<br>
doc.add(new Field(WORD, word, Store.YES, Field.Index.ANALYZED));<br>
indexWriter.addDocument(doc);<br>

分析:

Analyzer analyzer = new WhitespaceAnalyzer();<br>
QueryParser parser = new QueryParser(MEANING, analyzer);<br>
parser.setAllowLeadingWildcard(true);<br>
parser.setAutoGeneratePhraseQueries(true);<br> 
Query query = parser.parse(".*" + searchString + ".*");<br>
TopDocs tophits = isearcher.search(query, null, 1000);<br>


这(tophits)并没有归还我想要的东西。 (我上周左右一直在尝试Lucene,所以请原谅这是不是很天真)。有线索吗?

2 个答案:

答案 0 :(得分:0)

在索引文档时,使用了不同的分析器。可能KeywordAnalyzer或其他什么。在将文档编入索引时,您(通常)需要将相同的分析器传递给IndexWriter,这将是您在搜索时使用的文档。另外,请记住,在更正IndexWriter的分析器之后,您需要重新索引文档,以便正确编制索引。

在通配符中包含简单的短语查询是不能正确分析的替代方法。

答案 1 :(得分:-1)

找到解决方案,使用WildCardQuery,如下所示:

WildcardQuery wildCardQ = new WildcardQuery(new Term(MEANING,searchString));

但是对于不正确的单词/短语,有时需要很长时间才能回答。