Lucene布尔查询不能在dot net中工作

时间:2012-10-24 16:14:58

标签: c# lucene search-engine lucene.net

我正在使用Lucene dot net 2.9版并构建我的查询如下(GetQuery方法)。我可以使用具有相同查询的Luke工具从同一索引获取结果。但不是通过dotnet API。不确定是Lucene.net中的一个错误?或者我的错误。使用标准分析器完成索引并分析我正在搜索的所有字段。

注意:它与Luke合作使用相同的索引。我使用.net lucene 2.94而不是Java Lucene库

使用Luke工具的查询是:

+(内容:极地位置:极地)+分机:/ pdf / xls / doc / docx

以下是无效的c#代码:

    private static BooleanQuery GetQuery(string term, string exts)
    {
        string[] fields = { MetaKeys.Content, MetaKeys.Location };
        MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));

        Query multiFieldQuery = parser.Parse(term);
        TermQuery extQuery = new TermQuery(new Term(MetaKeys.Ext, exts));

        BooleanQuery combinedQuery = new BooleanQuery();
        combinedQuery.Add(multiFieldQuery, BooleanClause.Occur.MUST);
        if (extQuery != null)
        {
            combinedQuery.Add(extQuery, BooleanClause.Occur.MUST);
        }

        return combinedQuery;
    }

它用作以下

        string exts = "/pdf/xls/doc/docx";
        BooleanQuery combinedQuery = GetQuery(term, exts);

        TopDocs docs = indexSearch.Search(combinedQuery, to);

        //resulting in 0 Hits

请关闭我之前的问题的人注意:在你要关闭问题之前,给原始海报一个机会(至少24小时)来纠正它。

1 个答案:

答案 0 :(得分:0)

也许您会发现this适用:它有效,如果您需要任何其他建议,您可以问我,我在这里活跃! :)

基本上,它描述的与你正在做的事情大致相同,但它展示了一些你在这里没有做的事情;即,使用构造的MultiFieldQueryParser对象来解析输入搜索词并使用BooleanQuery将它们添加到一起。