【问题标题】:Lucene OR search using Boolean queryLucene OR 使用布尔查询进行搜索
【发布时间】:2013-12-10 20:48:30
【问题描述】:

我有一个包含多个字段的索引,其中一个是一个字符串字段,我在其中存储产品的类别名称......例如“电子产品”、“家庭”、“花园”等

new StringField("category_name", categoryName, Field.Store.YES)); //categoryName is a value such as "Electronics"

我正在执行布尔查询以按名称、价格和类别查找产品,但我不确定如何进行 OR 搜索以便同时查询两个类别。

我当前的查询如下所示:

String cat = "Electronics"
TermQuery catQuery = new TermQuery(new Term("category_name", cat));
bq.add(new BooleanClause(catQuery, BooleanClause.Occur.MUST)); // where "bq" is the boolean query I am adding to, I tried .SHOULD but that didn't help either

这适用于一个类别搜索,但我不知道如何搜索“电子或家庭”这将是两个类别。

【问题讨论】:

  • @Ibear 的回答是正确的,但您可能需要阅读 searchhub.org/dev/2011/12/28/why-not-and-or-and-not 以更好地了解布尔逻辑在 Lucene 中的工作原理。
  • @mindas ,感谢您的链接,这实际上也有很大帮助。希望我可以投票作为答案,因为它真的很有用。

标签: java apache lucene booleanquery


【解决方案1】:

你可以这样写:

BooleanQuery categoryQuery = new BooleanQuery();
TermQuery catQuery1 = new TermQuery(new Term("category_name", "Electronics"));
TermQuery catQuery2 = new TermQuery(new Term("category_name", "Home"));
categoryQuery.add(new BooleanClause(catQuery1, BooleanClause.Occur.SHOULD));
categoryQuery.add(new BooleanClause(catQuery2, BooleanClause.Occur.SHOULD));
bq.add(new BooleanClause(categoryQuery, BooleanClause.Occur.MUST));

【讨论】:

  • 我希望我能给这个多张赞成票。这就像一个魅力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
相关资源
最近更新 更多