【问题标题】:Lucene query documents where name matches against collection名称与集合匹配的 Lucene 查询文档
【发布时间】:2020-05-09 17:40:47
【问题描述】:

我有以下结构的 lucene 文档

 {
    name : "A",
    id :1
    },
{
    name : "B",
    id :1
    },
{
    name : "C",
    id :3
    }

现在我有一个像 List 这样的集合,其中包含 A、B。我想选择名称为 A 或 B 的文档。所以按照上面的 lucene 文件,我应该有文件 A 和 B 。我想用一个 lucene 调用而不是每个文档的多个 lucene 调用来获取这两个文档。

我尝试使用 BooleanQuery 并在循环中添加我的搜索查询,但搜索查询没有返回任何内容。如果我用单个文档点击 lucene,它可以工作并返回单个文档。

谁能建议我如何通过单个查询检索所有匹配的文档?

我尝试了类似下面的方法

List<string> terms = new List<string>(){'A', 'B'};
var mainQuery = new BooleanQuery);
                var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "name", analyzer);
                foreach (var term in terms)
                {

                    var query = parser.Parse(term);
                    mainQuery.Add(query, Occur.MUST_NOT);

                } 
var hits = _searcher.Search(mainQuery, 1000);

以上查询无效并返回 0 结果。

【问题讨论】:

    标签: c# lucene


    【解决方案1】:

    我可以自己解决这个问题。这只是一个简单的 OR 子句,即 Occur.SHOULD

    var booleanQuery = new BooleanQuery();
                    foreach (var term in terms)
                    {
                        var termQuery = new TermQuery(new Term("name", term ));
                        booleanQuery.Add(termQuery, Occur.SHOULD);
    
                    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 2014-05-21
      • 1970-01-01
      • 2015-03-14
      • 2019-01-10
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      相关资源
      最近更新 更多