我想索引和搜索使用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);
我想搜索:
解决此问题的最佳方法是什么?
答案 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(真);
你真的想要这个吗?这可能会影响性能,并可能导致意外的搜索行为。