0

我正在使用一个索引,其中混合了文档,有些可能包含自定义标签,例如:

  • <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,如果它是合理的。

有人处理过类似的事情吗?我应该考虑哪些陷阱?

我想最简单的方法是存储相同的文本,但从第二个字段上的标签中剥离出来,然后在那个字段上执行搜索。我很感激任何意见或建议。

4

1 回答 1

1

您最好的选择(在任何版本中)是创建一个 TokenFilter 来识别标签/正则表达式并从令牌流中省略它们。

顺便说一句:我发现从不存储字段是“好”的(可能除了“标识符”字段。然后将对象序列化为二进制字段。这将“索引”与“数据”分开。有一些好处搜索速度和IO要求

于 2017-01-16T13:48:24.477 回答