如何使用Lucene的MultiFieldQueryParser?

alv*_*vas 5 java lucene indexing information-retrieval

我在用Version.Lucene_29.使用普通的字符串查询方法,我可以执行以下操作:

Directory directory = new FSDirectory(...);
//Start Lucene retrieval.
IndexSearcher iSearch = new IndexSearcher(directory, true);
Analyzer analyzer = new WhitespaceAnalyzer();
QueryParser parser = new QueryParser(Version.LUCENE_29, "content", analyzer);
String str = 'filename:testfile.txt AND filetext:"Singapore food"'
Query query = parser.parse(str);
ScoreDoc[] hits = iSearch.search(query, 1000).scoreDocs;
Run Code Online (Sandbox Code Playgroud)

如何在Lucene中使用MultiFieldQueryParser触发查询,类似于字符串查询方法?

MultiFieldQueryParser multiParser = new MultiFieldQueryParser(
    Version.LUCENE_29, new String[] {"content", "ne"}, analyzer);
str = ???
Query = ????
ScoreDoc[] hits = iSearch.search(query, 1000).scoreDocs;
Run Code Online (Sandbox Code Playgroud)

Pri*_*esh 11

MultiFieldQueryParser允许您使用相同的分析器在多个文件中搜索"WORD".

例如

 Query query = MultiFieldQueryParser.parse("development",
        new String[]{"title", "subject"},
        new SimpleAnalyzer());
Run Code Online (Sandbox Code Playgroud)

它将在Field中寻找单词开发:"title"和Field:"subject"

  • 如果有机会让关键字包含多个单词,例如."软件开发",你还需要设置`MultiFieldQueryParser.setDefaultOperator(Operator.AND)`,否则会发现所有结果都包含"软件"**或**"开发". (4认同)