codecamp

什么是Tokenizer

Tokenizer 的工作是将文本流分解为令牌,其中每个令牌(通常)是文本中字符的子序列。分析器知道它配置的字段,但 tokenizer 不是。Tokenizers 从字符流(Reader)中读取并生成一系列令牌对象(TokenStream)。

输入流中的字符可能被丢弃,如空格或其他分隔符。也可以添加或替换它们,例如将别名或缩写映射到规范化的窗体。令牌包含除文本值之外的各种元数据,例如字段中令牌出现的位置。由于 Tokenizer 可能会产生与输入文本不一致的标记,因此不应假定该标记的文本与字段中出现的文本相同,或者其长度与原始文本相同。也可能有多个令牌具有相同的位置或引用原始文本中的相同偏移量。请记住,如果您使用令牌元数据来突出显示字段文本中的搜索结果。

<fieldType name="text" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>

在 tokenizer 元素中命名的类不是实际的 tokenizer,而是实现 TokenizerFactory API 的类。这个工厂类将被调用来根据需要创建新的 tokenizer 实例。由工厂创建的对象必须来自于 Tokenizer,这表示它们产生令牌序列。如果令牌生成器产生可以按原样使用的令牌,则它可能是分析器的唯一组件。否则,tokenizer 的输出标记将作为流水线中第一个过滤器阶段的输入。

TypeTokenFilterFactory 可用与创建 TypeTokenFilter 根据在 factory.getStopTypes 中设置的 TypeAttribute。

有关可用 TokenFilters 的完整列表,请参阅 Tokenizers 部分。

何时使用 CharFilter 与 TokenFilter

有几个 CharFilter 和 TokenFilter 对具有相关的(即:MappingCharFilter 和 ASCIIFoldingFilter)或几乎相同的(即:PatternReplaceCharFilterFactory 和PatternReplaceFilterFactory)功能,并且它可能并不总是显而易见的,这是最好的选择。

决定使用哪一个 Tokenizer,以及是否需要预处理字符流。

例如,假设你有一个 tokenizer,如 StandardTokenizer,虽然你对它的工作方式感到满意,但是你想要定制一些特定字符的行为。您可以修改规则并使用 JFlex 重新构建自己的 tokenizer,但是在使用标记和 CharFilter 之前简单地映射某些字符可能更容易。

Solr分析器概述
什么是Solr过滤器
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

SolrCloud

SolrCloud配置和参数

如何使用AsciiDoc

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }