关键词:term, token, index, mapping index,mapping是理解ela原理的两个关键概念。
首先,我们可以在kibana或curl命令行方式任意输入关键字进行全文检索是基于ela内部对信息存储的方式。一种称为倒排索引的方式(网上很多介绍这个概念,一看就懂)。了解了它又自然而然明白了文本的词、句在被索引前需要经过合适方式的处理。 elasticsearch对词句的分析(三个过程组合而成) character filter(字符过滤:去除无用标记html) tokenizer(分词器:根据分隔符断词) token filter(表征过滤:转换小写,去词,增加词) 内建分析器: 标准分析器 简单分析器 空格分析器 语言分析器
当我们索引一个文档时,全文字段会被分析为单独的词用以创建倒排索引。当我们在全文字段搜索时,也要让查询字符串经过同样的分析流程处理,确保这些词在索引中存在。
就是说,原文经过分析后以合适的语法语言形式(比如大写变小写,复数变单数)保存。而我们进行查询时的输入也需要经过这样的转换才能匹配。 为了保证document的每个字段field都能以正确的格式存储索引,这就需要在创建索引时通过mapping定义,来规定不同字段的格式类型,如何被索引等。
当Elasticsearch 在你的文档中探测到一个新的字符串字段,它将自动设置它为全文string字段并用standard分析器分析。 也许我们想要一个更适合这个数据的语言分析器。或者不做任何分析,只存储确切值。为了达到这种效果,必须通过mapping人工设置这些字段。
“index参数控制字符串以何种方式被索引 analyzed: 分析并索引,会导致分词,大小写等变化 not_analyzed: 索引,但不分析,内容和指定值完全一致 no:不索引, 不会被搜索到 类型说明 根据官方文档
PUT /gb{ "mappings": { "tweet": { # <-- tweet对应 type "PRoperties": { "tweet": { # <-- 对应具体的字段名(下面包含三个参数名type, index, analyzer) "type": "string", ## string类型默认index值为analyzed "analyzer": "english" ## 指明使用英语分析器 }, "date": { "type": "date" }, "name": { "type": "string" }, "user_id": { "type": "long" } } } }}新闻热点
疑难解答