Lucene - 搜索多个关联值

时间:2018-05-18 12:07:16

标签: java indexing lucene

我想索引和搜索使用Lucene索引的数据片段。

E.g。物品及其颜色

Item 1 - Black
Item 2 - Yellow
Item 3 - Red

搜索示例

搜索字词 - Item

Item 1 - Black
Item 2 - Yellow
Item 3 - Red

搜索字词 - Item 1

Item 1 - Black

搜索字词 - Item 2 - Yellow

Item 2 - Yellow

可能的解决方案

从我在this的答案中找到的内容显然我可以使用这种格式将它们添加到字段中。

// {Item 1}|{Black}
document.add(new StringField("item", MessageFormat.format("'{'{0}'}'|'{'{1}'}'", itemName, itemColour, Field.Store.YES));

如果我现在用这种格式的数据进行搜索,我得不到任何结果。

我正在使用StandardAnalyzer

这就是我创建查询的方式。

QueryParser queryParser = new QueryParser("item", analyzer);
queryParser.setAllowLeadingWildcard(true);
Query query = queryParser.parse(keyword);

我想搜索:

  1. 所有具有匹配名称的项目
  2. 所有匹配且具有特定颜色的项目
  3. 解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您希望将来构建其他可能的搜索,我建议使用不同的文档结构。这是一个抽象的视图

new StringField("number", number);
new StringField("item", item);
new StringField("color", color);

除了这3个字段之外,您还可以为全文搜索添加字段,包括三个字段的所有信息。这将由TextField See Lucene Field javadoc

完成
new TextField("fulltext", item + " " + number + " " + "color");

通过此功能,您可以将全文搜索应用于"全文"字段,可以直接搜索其他字段。

最后一件事:

  

queryParser.setAllowLeadingWildcard(真);

你真的想要这个吗?这可能会影响性能,并可能导致意外的搜索行为。