无法使用lucene搜索两个术语

时间:2011-08-08 11:56:48

标签: java lucene

我在项目中编写了以下代码:

final IndexSearcher indexSearcher = new IndexSearcher(INDEXING_DIRECTORY, true);  
final Query query = new QueryParser(Version.LUCENE_33, "keywords", new StandardAnalyzer(Version.LUCENE_33)).parse("cats movies");
final TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
indexSearcher.search(query, collector);
final ScoreDoc[] hits = collector.topDocs(0, 10).scoreDocs;

这项任务非常简单。

例如,我有一个带有索引“关键字”字段的存储记录。例如,关键字可能类似于“有趣的猫的电影吨”。

问题是,如果搜索查询将是“有趣的猫”(在索引字段中的单词顺序),我上面的代码将返回记录,但在“猫电影”上将失败。我该怎么写我的查询,所以它会匹配任何单词的顺序,如果有可能也会搜索相似的单词呢?

1 个答案:

答案 0 :(得分:1)

很可能“猫电影”将被解析为PhraseQuery。 PhraseQueries尊重订购。你想要的是BooleanQuery有两个TermQueries加上AND

final Query query = new QueryParser(Version.LUCENE_33, "keywords", new StandardAnalyzer(Version.LUCENE_33)).parse("+cats AND +movies");

列出了更多示例here。有些可能已经过时了。

类似的词是一项相当艰巨的任务,因为你需要至少有某种词汇表或数据库来对齐同义词。