c# - BooleanQuery 无法使用 Lucene.net 3.0.3

标签 c# lucene.net booleanquery

为什么在 Lucene.net 上使用 BooleanQuery 时第一个查询有效而第二个查询无效?

这是在 SHOPPING 字段上编入索引的示例:

Shoes for sale

Great bargain on shoes and accessories.

Buy cheap Shoes, Sneekers and Heels!

第一个查询(运行良好,它返回所有三个索引)。

Query query = MultiFieldQueryParser.Parse(Lucene.Net.Util.Version.LUCENE_30, 
    "Shoes", new String[] { "SHOPPING" }, new Occur[] { Occur.SHOULD }, 
     new SimpleAnalyzer()
);
hits = indexSearcher.search(query);

第二个查询(不返回任何内容,条件是:返回所有带有“shoes”但没有“accessories”的术语)。

Query query1 = new TermQuery(new Term("SHOPPING", "shoes"));
Query query2 = new TermQuery(new Term("SHOPPING", "accessories"));

BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(query1, Occur.SHOULD);
booleanQuery.Add(query2, Occur.MUST_NOT);

hits = indexSearcher.search(booleanQuery);

最佳答案

我想我明白了。假设结合使用 MultiFieldQueryParser 和 BooleanQuery 来解决问题。

    Query query = MultiFieldQueryParser.Parse(Lucene.Net.Util.Version.LUCENE_30, "Shoes", new String[] { "SHOPPING" }, new SimpleAnalyzer());

    Query queryOrig = parser.Parse("shoes");
    Query queryOrig2 = parser.Parse("accessories");

    var booleanQuery= new BooleanQuery();
    booleanQuery.Add(queryOrig, Occur.MUST);
    booleanQuery.Add(queryOrig2, Occur.MUST_NOT);

    hits = indexSearcher.search(booleanQuery);

关于c# - BooleanQuery 无法使用 Lucene.net 3.0.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34326191/

相关文章:

c# - ElasticSearch:使用NEST从动态条件列表中创建查询

c# - 使用脚本启用到 sql express 的远程连接

c# - 1到100亿之间有多少个数字包含14

search - 搜索引擎之间的主要区别是什么,这些区别会影响使用哪个搜索引擎来搜索专有数据的决定?

C# Lucene 标签搜索问题、转义问题?

asp.net-mvc - 在 Lucene.Net.Store.SimpleFSDirectory@ 中找不到段* 文件

c# - 来自设置的常量字符串

c# - .NET DateTime 不在 ToShortTimeString() 中返回 AM/PM

algorithm - lucene bool 搜索

java - Lucene OR 搜索使用 boolean 查询