如何使用Lucene.Net获得找到的单词列表?

本文关键字:单词 列表 何使用 Lucene Net | 更新日期: 2023-09-27 18:13:12

我已经索引了文档。它们有内容:

文档1:

房间里有一张绿色的桌子。房间很小。
文档2:

房间里有绿色的桌子。房间很大。

我在找"绿色桌子"。我会找到Document1和Document2。我想展示找到了哪些短语。我在第一份文件中找到了"绿色表格"。我在第二份文件中找到了"绿色表格"。我如何获得发现词的列表("绿色表"answers"绿色表")?我正在使用Lucene。Net version 3.0.3.

如何使用Lucene.Net获得找到的单词列表?

您可以使用荧光笔标记"找到的单词"。如果您出于其他原因想找到它们,您仍然可以使用荧光笔,然后使用正则表达式(或简单的子字符串循环)提取单词。

例如:

Query objQuery = new TermQuery(new Term("content", strQuery));
QueryScorer scorer = new QueryScorer(objQuery , "content");
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<b>","</b>");
highlighter = new Highlighter(formatter, scorer);
highlighter.TextFragmenter = new SimpleFragmenter(9999);
for (int i = 0; i < topRealtedDocs.ScoreDocs.Length; i++)
{
     TokenStream stream = TokenSources.GetAnyTokenStream(searcher.IndexReader, topRealtedDocs.ScoreDocs[i].Doc, "content", analyzer);
     string strSnippet = highlighter.GetBestFragment(stream, doc.GetValue("content"));
     // here you can do what you want with the snippet. add it to your result or for example extract the words (not with a regex - this is just an example from here! use what ever you need):
     List<string> foundPhrases = new List<string>();
     while (strSnippet.IndexOf("<b>") > -1)
     {
          int indexStart = strSnippet.IndexOf("<b>");
          int indexEnd = strSnippet.IndexOf("</b>");
          foundPhrases.Add(strSnippet.Substring(indexStart, indexEnd - indexStart));
          strSnippet = strSnippet.Substring(indexEnd);
     }
}
暗利