Java Lucene-搜索多个关联值
我想索引和搜索使用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
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");