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的时候创建一个新的字段,你可以放置文件名和文件内容的内容,然后你只需要搜索一个字段。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |