我正在使用索引,其中包含多种文档,有些可能包含自定义标记,如:
“一些长句
<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 实现的吗?我甚至考虑迁移到 Lucene 4.8 Beta ,如果它合理的话。
任何人处理类似的事情?我应该考虑陷阱吗?
我想最简单的方法是存储相同的文本,但是会从第二个字段上的标记中删除,而是在该字段上执行搜索。 我很感激任何意见或建议。
答案 0 :(得分:1)
您最好的选择(在任何版本中)都是创建一个TokenFilter,它可以识别标记/正则表达式并从令牌流中省略它们。
btw:我发现永远不会存储字段(可能除了“标识符”字段之外“很好”。然后将对象序列化为二进制字段。这将“索引”与“数据”分开。在搜索速度和IO要求方面有一些好处