Java Lucene-搜索多个关联值

Java Lucene-搜索多个关联值,java,indexing,lucene,Java,Indexing,Lucene,我想索引和搜索使用Lucene索引的数据片段 例如项目及其颜色 Item 1 - Black Item 2 - Yellow Item 3 - Red 搜索示例 搜索词-项目 Item 1 - Black Item 2 - Yellow Item 3 - Red 搜索词-项目1 Item 1 - Black 搜索词-第2项-黄色 Item 2 - Yellow 可能的解决方案 根据我在答案上的发现,显然我可以使用这种格式将这些内容添加到字段中 // {Item 1}|{Black} do

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

例如项目及其颜色

Item 1 - Black
Item 2 - Yellow
Item 3 - Red
搜索示例

搜索词-
项目

Item 1 - Black
Item 2 - Yellow
Item 3 - Red
搜索词-
项目1

Item 1 - Black
搜索词-
第2项-黄色

Item 2 - Yellow
可能的解决方案

根据我在答案上的发现,显然我可以使用这种格式将这些内容添加到字段中

// {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);
我想搜索:

  • 具有匹配名称的所有项目
  • 所有匹配且具有特定颜色的项目

  • 解决这个问题的最佳方法是什么

    如果您将来想建立其他可能的搜索,我建议对文档使用不同的结构。这里有一个抽象的观点

    new StringField("number", number);
    new StringField("item", item);
    new StringField("color", color);
    
    除了这3个字段之外,您还可以添加一个用于全文搜索的字段,包括这三个字段的所有信息。这将通过
    TextField

    这样,您就可以将全文搜索应用于“全文”字段,也可以将其他一些搜索直接应用于其他字段

    最后一件事:

    queryParser.SetAllowReadingWildcard(true)

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

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