如何在Lucene QueryParser中指定两个字段?

我读了如何将QueryParser中的多个字段? 但我没有得到它。

目前我有一个非常奇怪的build筑,如:

parser = New QueryParser("bodytext", analyzer) parser2 = New QueryParser("title", analyzer) query = parser.Parse(strSuchbegriff) query2 = parser.Parse(strSuchbegriff) 

我能做些什么,如:

 parser = New QuerParser ("bodytext" , "title",analyzer) query =parser.Parse(strSuchbegriff) 

所以parsing器在字段“标题”中查找字段“bodytext”中的search词。

有3种方法可以做到这一点。

第一种方法是手动构build查询,这是QueryParser在内部执行的操作。 这是实现它的最有效的方法,并且意味着如果要防止访问QueryParser一些更奇特的function,则不必parsing用户input:

 IndexReader reader = IndexReader.Open("<lucene dir>"); Searcher searcher = new IndexSearcher(reader); BooleanQuery booleanQuery = new BooleanQuery(); Query query1 = new TermQuery(new Term("bodytext", "<text>")); Query query2 = new TermQuery(new Term("title", "<text>")); booleanQuery.add(query1, BooleanClause.Occur.SHOULD); booleanQuery.add(query2, BooleanClause.Occur.SHOULD); // Use BooleanClause.Occur.MUST instead of BooleanClause.Occur.SHOULD // for AND queries Hits hits = searcher.Search(booleanQuery); 

第二种方法是使用MultiFieldQueryParser ,它的行为类似于QueryParser ,允许访问它拥有的所有权力,除了它将search多个字段。

 IndexReader reader = IndexReader.Open("<lucene dir>"); Searcher searcher = new IndexSearcher(reader); Analyzer analyzer = new StandardAnalyzer(); MultiFieldQueryParser queryParser = new MultiFieldQueryParser( new string[] {"bodytext", "title"}, analyzer); Hits hits = searcher.Search(queryParser.parse("<text>")); 

最后的方法是使用QueryParser的特殊语法, 请看这里 。

 IndexReader reader = IndexReader.Open("<lucene dir>"); Searcher searcher = new IndexSearcher(reader); Analyzer analyzer = new StandardAnalyzer(); QueryParser queryParser = new QueryParser("<default field>", analyzer); // <default field> is the field that QueryParser will search if you don't // prefix it with a field. string special = "bodytext:" + text + " OR title:" + text; Hits hits = searcher.Search(queryParser.parse(special)); 

你的另外一个select是当你创build一个名为bodytextandtitle的内容时,你可以放置bodytext和title的内容,然后你只需要search一个字段。