vb.net – 如何在QueryParser中合并多个字段?

前端之家收集整理的这篇文章主要介绍了vb.net – 如何在QueryParser中合并多个字段?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Dim qp1 As New QueryParser("filename",New StandardAnalyzer())
Dim qp2 As New QueryParser("filetext",New StandardAnalyzer())
.
.

我使用’Lucene.Net’库并有以下问题。

不是创建两个单独的QueryParser对象,并使用它们来获取两个Hits对象,是否可以使用单个QueryParser对象在两个字段上执行搜索,以便我只有一个Hits对象,它给我的每个文档的总分?

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

第一种方式是手动构造查询,这是QueryParser在内部执行的操作。这是最强大的方法,这意味着如果您想要阻止访问QueryParser的一些更奇特的功能,您不必解析用户输入:

IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);

BooleanQuery booleanQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("filename","<text>"));
Query query2 = new TermQuery(new Term("filetext","<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,允许访问它拥有的所有权力,除了它将搜索多个字段。

IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);

Analyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
                                        new string[] {"filename","filetext"},analyzer);

Hits hits = searcher.Search(queryParser.parse("<text>"));

最后的方法是使用QueryParser see here的特殊语法。

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 = "filename:" + text + " OR filetext:" + text;

Hits hits = searcher.Search(queryParser.parse(special));

你的另一个选项是在你的内容名为filenameandtext的时候创建一个新的字段,你可以放置文件名和文件内容内容,然后你只需要搜索一个字段。

猜你在找的VB相关文章