我正在处理一个索引,其中有一个混合文档,其中一些可能包含自定义标记,如:
<custom-tag attr="value" />,结束在这里”<custom-tag attr="value" />,在这里以<custom-tag-2 attr="value2" />结尾”<another-custom-tag attr="value" />,在这里结束<another-custom-tag attr=value />”我应该找到与标签的名字和属性完全不可知的精确匹配。构建这样一个假设的查询,我首先想到的是正则表达式,例如:
regex(<[^>]*>?,结束在这里”将返回第一个文档,并且
regex(<[^>]*>?,在这里以regex(<[^>]*>?结尾”会返回第二份文件。
这是我可以用Lucene 3.x实现的吗?我甚至考虑迁移到Lucene4.8Beta,如果这是合理的话。
有人处理过类似的事情吗?有什么陷阱我应该考虑吗?
我想最简单的方法是存储相同的文本,但去掉第二个字段上的标记,然后对该字段执行搜索。如有任何意见或建议,我将不胜感激。
发布于 2017-01-16 13:48:24
您的最佳选择(在任何版本中)是创建一个TokenFilter,它将识别标记/regex并从令牌流中省略它们。
顺便说一句:我发现永远不要存储字段是“好的”(可能不包括“标识符”字段)。然后将对象序列化为二进制字段。这将“索引”与“数据”分开。在搜索速度和IO要求方面有一些好处。
https://stackoverflow.com/questions/39051933
复制相似问题