elasticsearch 建立索引

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhairuiping1989/article/details/84314913

创建mapping的过程

介绍:分词器(analyzer) 包括一个分解器(tokenizer)和多个词元过滤器(filter),词元过滤器的作是对分词器提取的词元进一步处理,比如转成小写,使用edge_ngram,同义词等,处理之后成为索引词(Term),文档正包含了几个这样的term成为Frequency(词频)

分解器(tokenizer): 类型有:standard tokenizer,Edge NGram tokenizer,Keyword Tokenizer,Lowercase Tokenizer,NGram Tokenizer,pinyin等

1,如果对于需求比较复杂的,比如说要拼音分词,这个是要建在settings中

PUT XXX-20181109

{

"settings" {

“numbers_of_shards”:3,"number_of_replicas":1,"analysis"{

}

}

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我们说过:"你只能找到存在于倒排索引中的词条"。尽管prefix,wildcard以及regexp查询证明了上面的说法并不是一定正确,但是执行一个基于单个词条的查询会比遍历词条列表来得到匹配的词条要更快是毫无疑问的。为了部分匹配而提前准备你的数据能够增加搜索性能。

在索引期间准别数据意味着选择正确的分析链(Analysis Chain),为了部分匹配我们选择的工具叫做n-gram。一个n-gram可以被想象成一个单词上的滑动窗口(Moving Window)。n表示的是长度。如果我们对单词quick得到n-gram,结果取决于选择的长度:

  • 长度1(unigram): [ q, u, i, c, k ]
  • 长度2(bigram): [ qu, ui, ic, ck ]
  • 长度3(trigram): [ qui, uic, ick ]
  • 长度4(four-gram):[ quic, uick ]
  • 长度5(five-gram):[ quick ]

单纯的n-grams对于匹配单词中的某一部分是有用的,在复合单词的ngrams中我们会用到它。然而,对于即时搜索,我们使用了一种特殊的n-grams,被称为边缘n-grams(Edge n-grams)。边缘n-grams会将起始点放在单词的开头处。单词quick的边缘n-gram如下所示:

  • q
  • qu
  • qui
  • quic
  • quick

你也许注意到它遵循了用户在搜索"quick"时的输入形式。换言之,对于即时搜索而言它们是非常完美的词条。

-----------------------------------------------------------------------

可能要自定义一个分词器:

准备索引

第一步是配置一个自定义的edge_ngram词条过滤器,我们将它称为autocomplete_filter:

{
    "filter": {
        "prefix_filter": {
            "type":     "edge_ngram",
            "min_gram": 2,
            "max_gram": 20
        }
    }
}

以上配置的作用是,对于此词条过滤器接受的任何词条,它都会产生一个最小长度为1,最大长度为20的边缘ngram(Edge ngram)。

创建分解器

{ "tokenizer": { "my_pinyin": { "type": "pinyin", "padding_char": " " , "keep_ployphone": "true"} } }

keep_ployphone 主要是支持多音字

然后我们将该词条过滤器配置在自定义的解析器中,该解析器名为name-pinyin-analyzer。

{
    "analyzer": {
        "name-pinyin-analyzer": {
            "type":      "custom",
            "tokenizer": "my_pinyin",
            "filter": [
                "lowercase",
                "prefix_filter" 
            ]
        }
    }
}

自定义的拼音分词器已经完工

 2,创建mapping

建立mapping,设置IK分词器和拼音分词器

  PUT / blog_website {
    "mappings": {
        "blogs": {
            "properties": {
                "title": {
                    "type": "text",
                    "analyzer": "ik_max_word",
                    "fields”: {
                    "pinyin”: {
                    "type”:“ text”,
                    "analyzer”:“ name - pinyin - analyzer”
                }
            }
        },
        "content": {
            "type": "text",
            "analyzer": "ik_max_word"
        },
        "dt”: {
        "type": "date",
        "format": "yyyy-MM-dd||yyyyMMdd"
    },
    "id”: {
    "type": "keyword"
}
}
}
}
 

2,同义词

可以预定义一个文件,同义词文件,然后查询的时候,用or语句查询,就可以同义词查询出所有的文件

3,扩展词,在nginx挂一个扩展词,

4,安全过滤

5,多音字:工商银行,行字是hang,xing

猜你喜欢

转载自blog.csdn.net/zhairuiping1989/article/details/84314913