如何在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一个字段。