我在项目中编写了以下代码:
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;
这项任务非常简单。
例如,我有一个带有索引“关键字”字段的存储记录。例如,关键字可能类似于“有趣的猫的电影吨”。问题是,如果搜索查询将是“有趣的猫”(在索引字段中的单词顺序),我上面的代码将返回记录,但在“猫电影”上将失败。我该怎么写我的查询,所以它会匹配任何单词的顺序,如果有可能也会搜索相似的单词呢?
答案 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。有些可能已经过时了。
类似的词是一项相当艰巨的任务,因为你需要至少有某种词汇表或数据库来对齐同义词。