首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene.net PerFieldAnalyzerWrapper

Lucene.net PerFieldAnalyzerWrapper
EN

Stack Overflow用户
提问于 2013-04-05 03:54:44
回答 1查看 1.5K关注 0票数 2

我已经阅读了如何使用每字段分析器包装器,但无法让它与我的自定义分析器一起工作。我甚至不能让分析器运行构造函数,这让我相信我实际上错误地调用了每个字段的分析器。

这就是我要做的:

创建每字段分析器:

代码语言:javascript
复制
PerFieldAnalyzerWrapper perFieldAnalyzer = new  PerFieldAnalyzerWrapper(srchInfo.GetAnalyzer(true));
perFieldAnalyzer.AddAnalyzer("<special field>", dta);

像往常一样添加文档的所有字段,包括我们以不同方式分析的特殊字段。

使用分析器添加文档,如下所示:

代码语言:javascript
复制
iw.AddDocument(doc, perFieldAnalyzer);

我在正确的轨道上吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-06 02:26:43

这个问题与我对CMS (Kentico)内置Lucene助手类的依赖有关。基本上,使用这些类需要通过CMS指定索引级的自定义分析器,而我不希望这样做。因此,我最终几乎在任何地方都直接使用Lucene.net,可以灵活地使用任何我想要的自定义分析器

我还对数据结构进行了一些更改,最终使用久经考验的KeywordAnalyzer来分析文档标记。以前我试着在逗号分隔值上做一些自定义的标记化魔术,比如tag1,tag2,带有许多部分的标签,但无法让它与多部分的标签一起可靠地工作。我仍然保留该字段,但开始向文档添加多个" tag“字段,每个字段存储一个标记。因此,现在我有N个" tag“字段来表示"N”个标签,每个“tag”字段都被分析为一个关键字,这意味着每个标签(一个或多个)都是一个令牌。

我想我在最初的方法中想得太多了。

这就是我最终得到的结果。

在索引方面:

代码语言:javascript
复制
KeywordAnalyzer ka = new KeywordAnalyzer();
PerFieldAnalyzerWrapper perFieldAnalyzer = new PerFieldAnalyzerWrapper(srchInfo.GetAnalyzer(true));
perFieldAnalyzer.AddAnalyzer("documenttags_t", ka);

-- Some procedure to compile all documents by reading from DB and putting into Lucene docs

foreach(var doc in docs)
{
   iw.AddDocument(doc, perFieldAnalyzer);
}

在搜索时:

代码语言:javascript
复制
KeywordAnalyzer ka = new KeywordAnalyzer();
PerFieldAnalyzerWrapper perFieldAnalyzer = new PerFieldAnalyzerWrapper(srchInfo.GetAnalyzer(true));
perFieldAnalyzer.AddAnalyzer("documenttags_t", ka);

string baseQuery = "documenttags_t:\"" + tagName + "\"";
Query query = _parser.Parse(baseQuery);
var results = _searcher.Search(query, sortBy)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15820504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档