分析器
分词器的作用词干
词干过滤器 令牌过滤器 测试分词
analyze API
分析分词分析分词令牌过滤器创建索引添加文本分析 分词器
默认分词器自定义分词器指定分词器
内置分词器
html_stripmy_mappings_char_filter pattern_replace character filter
分析器无论是内置的还是自定义的——只是一个包含三个较低级构建块的包:字符过滤器、标记器和标记过滤器。
字符过滤器字符过滤器以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换字符流。 例如,可以使用字符过滤器将印度-阿拉伯数字(٠١٢٣٤٥٦٧٨٩)转换为阿拉伯-拉丁数字(0123456789),或者从流中剥离像这样的HTML元素。
一个分析器可以有零个或多个字符过滤器,它们是按顺序应用的。
分词器在创建索引的时候需要用到分词器,在使用字符串搜索的时候也会用到分词器,并且这两个地方要使用同一个分词器,否则可能会搜索不出来结果。
分词器的作用分词器(Analyzer)的作用是把一段文本中的词按规则取出所包含的所有词,对应的是Analyzer类,这是一个抽象类(public abstract class org.apache.lucene.analysis.Analyzer),切分词的具体规则是由子类实现的,所以对于不同的语言规则,要有不同的分词器。 词干
词干提取是将单词简化为词根形式的过程
词干过滤器算法词干分析器
它们需要很少的设置,并且通常开箱即用。
他们使用很少的内存。
它们通常比字典词干分析器更快。字典词干分析器
字典词干分析器在提供的字典中查找单词,用字典中的词干词替换未词干的词变体。
缺点:
词典质量
词典词干分析器的好坏取决于它的词典。为了正常工作,这些词典必须包含大量单词,定期更新,并随着语言趋势而变化。通常,当字典可用时,它是不完整的,并且其中的一些条目已经过时了。大小和性能
词典词干分析器必须将其词典中的所有单词、前缀和后缀加载到内存中。这可能会使用大量 RAM。低质量的字典在去除前缀和后缀时可能效率较低,这会显着减慢词干提取过程。
令牌过滤器
令牌过滤器接收令牌流,并可以添加、删除或更改令牌。 例如,小写令牌过滤器将所有令牌转换为小写令牌,停止令牌过滤器从令牌流中删除常见单词(停止单词),同义词令牌过滤器将同义词引入令牌流。
令牌过滤器不允许更改每个令牌的位置或字符偏移量。
Analyzer可以有零个或多个令牌过滤器,它们是按顺序应用的。
测试分词 analyze API 分析分词POST _analyze { "analyzer": "whitespace", "text": "The quick brown fox." }分析分词令牌过滤器
POST _analyze { "tokenizer": "standard", "filter": [ "lowercase", "asciifolding" ], "text": "Is this déja vu?" }创建索引添加文本分析
PUT my-index-000001 { "settings": { "analysis": { "analyzer": { "std_folded": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "asciifolding" ] } } } }, "mappings": { "properties": { "my_text": { "type": "text", "analyzer": "std_folded" } } } }分词器 默认分词器 自定义分词器
配置
PUT my-index-000001 { "settings": { "analysis": { "analyzer": { "my_custom_analyzer": { `1` "char_filter": [ "emoticons" ], "tokenizer": "punctuation", "filter": [ "lowercase", "english_stop" ] } }, "tokenizer": { "punctuation": { `2` "type": "pattern", "pattern": "[ .,!?]" } }, "char_filter": { "emoticons": { `3` "type": "mapping", "mappings": [ ":) => _happy_", ":( => _sad_" ] } }, "filter": { "english_stop": { `4` "type": "stop", "stopwords": "_english_" } } } } } POST my-index-000001/_analyze { "analyzer": "my_custom_analyzer", "text": "I'm a :) person, and you?" } response:{[我,_happy_,人,你]}
1,为索引分配一个默认的自定义Analyzer,my_custom_analyzer. 此Analyzer使用稍后在请求中定义的自定义标记器、字符过滤器和标记过滤器。该Analyzer也省略了type参数。
2,定义自定义punctuation标记器。
3,定义自定义emoticons字符过滤器。
4,定义自定义english_stop令牌过滤器。
字段
PUT my-index-000001 { "mappings": { "properties": { "title": { "type": "text", "analyzer": "whitespace" } } } }
索引
PUT my-index-000001 { "settings": { "analysis": { "analyzer": { "default": { "type": "simple" } } } } }内置分词器
Standard Analyzer
所述standardAnalyzer将文本分为在字边界条件,如通过Unicode文本分割算法定义。它删除了大多数标点符号、小写术语,并支持删除停用词。Simple Analyzer
讲除了字母以外的符号全部去除,并且讲所有字符变为小写,需要注意的是这个分词器同样把数据也去除了,同样不支持中文。Whitespace Analyzer
仅仅是去掉了空格,没有其他任何 *** 作,不支持中文。Stop Analyzer
这个和SimpleAnalyzer类似,不过比他增加了一个的是,在其基础上还去除了所谓的stop words,比如the, a, this这些。这个也是不支持中文的StandardAnalyzer
英文方面的处理和StopAnalyzer一样的,对中文支持,使用的是单字切割。Keyword Analyzer
所述keywordAnalyzer是一个“空 *** 作”Analyzer接受任何文本它被赋予并输出完全相同的文本作为一个单一的术语。Pattern Analyzer
所述patternAnalyzer使用一个正则表达式的文本分成条款。它支持小写和停用词。Language Analyzers
Elasticsearch 提供了许多特定于语言的Analyzer,例如english或 french。Fingerprint Analyzer
所述fingerprintAnalyzer是一个专业Analyzer,它产生可用于重复检测指纹。
POST _analyze { "analyzer": "fingerprint", "text": "Yes yes, Gödel said this sentence is consistent and." } [ and consistent godel is said sentence this yes ]html_strip
GET /_analyze { "tokenizer": "keyword", "char_filter": [ "html_strip" ], "text": "I'm so happy!
" } [ nI'm so happy!n ]
使用
PUT /my-index-000001 { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "keyword", "char_filter": [ "html_strip" ] } } } } }my_mappings_char_filter
PUT /my-index-000001 { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "standard", "char_filter": [ "my_mappings_char_filter" ] } }, "char_filter": { "my_mappings_char_filter": { "type": "mapping", "mappings": [ ":) => _happy_", ":( => _sad_" ] } } } } } GET /my-index-000001/_analyze { "tokenizer": "keyword", "char_filter": [ "my_mappings_char_filter" ], "text": "I'm delighted about it :(" } [ I'm delighted about it _sad_ ]pattern_replace character filter
PUT my-index-000001 { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "standard", "char_filter": [ "my_char_filter" ] } }, "char_filter": { "my_char_filter": { "type": "pattern_replace", "pattern": "(\d+)-(?=\d)", "replacement": "_" } } } } } POST my-index-000001/_analyze { "analyzer": "my_analyzer", "text": "My credit card is 123-456-789" } [ My, credit, card, is, 123_456_789 ]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)