在忽略自定义标签的同时查找精确匹配

时间:2016-08-20 08:06:49

标签: lucene lucene.net lucene.net.linq

我正在使用索引,其中包含多种文档,有些可能包含自定义标记,如:

  
      
  • “一些长句<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 ,如果它合理的话。

任何人处理类似的事情?我应该考虑陷阱吗?

我想最简单的方法是存储相同的文本,但是会从第二个字段上的标记中删除,而是在该字段上执行搜索。 我很感激任何意见或建议。

1 个答案:

答案 0 :(得分:1)

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

btw:我发现永远不会存储字段(可能除了“标识符”字段之外“很好”。然后将对象序列化为二进制字段。这将“索引”与“数据”分开。在搜索速度和IO要求方面有一些好处