2012-10-03 63 views
1

如何在lucene.net中搜索html实体?Lucene.Net。如何在HTML实体中搜索

我所有的指数数字HTML实体,所以如果我搜索例如“34”谈到&#<b>34</b>;

也很有意思,如何通过与像SQL不同的词不同领域做搜索。例如搜索短语“word1 word2”

SELECT * FROM table WHERE 
title LIKE 'word1%' OR title LIKE 'word2%' OR 
description LIKE'word1%' OR description LIKE 'word2%' 

回答

3

归结为如何存储它。当您存储文档时,看起来您正在存储您的HTML 搜索。

我建议你有两个不同的领域:

  • One将原始的HTML,但它是分析
  • 一个(有没有必要在标记搜索,是吗?)包含为搜索处理的HTML。这个字段是而不是存储的,但是它的分析。

为了填充第二场,你应该通过类似HTML Agility Pack运行HTML让你存储的HTML节点/处理的内部文本,然后运行通过HttpUtility.HtmlDecode method文本,以获得HTML实体代表您可以实际分析和搜索的文本。

然后,您可以在分析的字段上搜索任何想要的内容,而无需执行任何特殊操作,然后从存储原始HTML的字段中检索内容。

关于通配符搜索,它们受支持,您只需have to build your query appropriately(假设您使用的是QueryParser)。请注意,通配符前缀默认情况下未启用。

+0

是的,非常好的主意,谢谢,其实我也有同样的想法,但有一点不同,那就是从数据库中获取真实数据。 你可以帮助MultiFieldQueryParser吗?这是非常有趣的,这种方法返回不是这样的查询(但不知道),正如我上面提到的。 MultiFieldQueryParser返回(标题:word1描述:word1)(标题:word2描述:word2)。现在我使用自己的查询,但想用MultiFieldQueryParser – vlukham

+0

@majatu进行更新我已经更新了答案,以指示如何执行通配符搜索。请注意,通配符搜索通常非常缓慢,除非您专门构建索引来处理这些情况(这些索引非常大)。 – casperOne