加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 22:35:42 所属栏目:大数据 来源:网络整理
导读:Dim qp1 As New QueryParser("filename",New StandardAnalyzer())Dim qp2 As New QueryParser("filetext",New StandardAnalyzer()).. 我使用’Lucene.Net’库并有以下问题。 不是创建两个单独的QueryParser对象,并使用它们来获取两个Hits对象,是否可以使用
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的时候创建一个新的字段,你可以放置文件名和文件内容的内容,然后你只需要搜索一个字段。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读