当前位置: 首页 > 面试题库 >

如何在QueryParser中合并多个字段?

彭炳
2023-03-14
问题内容
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叫你索引你的内容,可以在其中放置的内容既文件名和FILETEXT,那么你只需要搜索一个领域。



 类似资料:
  • 问题内容: 我阅读了[如何在QueryParser中合并多个字段?](http://codingdict.com/questions/136407但是我不明白。 目前,我有一个非常奇怪的结构,例如: 我该怎么办? 因此解析器会在“ bodytext”字段和“ title”字段中寻找搜索词。 问题答案: 有3种方法可以做到这一点。 第一种方法是手动构造查询,这是内部的工作。这是执行此操作最强大的方法

  • 问题内容: 供参考的是代码。我正在尝试制作一个记录到elasticsearch的hubot插件,然后使用hubot命令搜索那些日志。 https://gist.github.com/4050748 我正在尝试检索与两个查询匹配的记录。 我期待: 多达50条记录 具有给定用户的记录 最近一小时的记录 我有: 最多10条记录 具有给定用户的记录 从任何时候 我如何在过去一小时内获取带有某些用户名的所有

  • 问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 可能的重复项: 在MS SQL Server 2005中模拟group_concat MySQL函数? SQL Server中的Concat组 我正在尝试编写将行合并在一起的SQL查询。我需要它通过ID#将未指定数量的行组合在一起,但将它们的地址连接起来,例如说成一个单元格。 说我们有 我想得到 每个ID的地址数量可以变化。一些ID具有1,

  • 我有很多海面温度NetCDF文件,具有相同的纬度和纬度,但时间变量不同。我想尝试通过组合时间变量将其组合成一个NetCDF文件,因为每个NetCDF文件中的时间变量是连续的 有没有更有效的方法?因为在CDO(气候数据操作员)中,我无法进行循环 下面是我使用的文件名的一个例子 带模式sstdas_(年)(月)(dekad)

  • 本文向大家介绍Python如何合并多个字典或映射,包括了Python如何合并多个字典或映射的使用技巧和注意事项,需要的朋友参考一下 问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在。 解决方案 加入你有如下两个字典: 现在假设你必须在两个字典中执行查找操作(比如先从a中找,如果找不到再在b中找)。一个非常简单扼解决方案就是使用co

  • 本文向大家介绍如何在TestNG中将多个组合并为单个Test?,包括了如何在TestNG中将多个组合并为单个Test?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助测试组功能将多个组组合到TestNG中的单个Test中。 示例 用组测试xml文件。 要从测试用例集合中运行一组测试用例,我们必须在testng xml文件中定义<groups>。在这里,testNG xml包含与单个Test相