# similarity （相似度模型）

**Elasticsearch** 允许你为每一个字段配置一个得分算法或**similarity**（匹配算法）。**similarity**设置提供了一个简单的方式让你选择匹配算法，而不仅仅是默认的**TF/IDF**算法，比如可以选择**BM25。**

**similarity**主要用于**text**字段，但也可用于其他类型的字段。

自定义匹配算法可以通过修改内置匹配方法的参数来达到目的。要获取此专业选项更详细的解释，可以参考[**similarity module**](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/index-modules-similarity.html)**。**

对于能跳出以上限制，而不用任何其他配置的匹配算法只有一下两种：

BM25：

**Okapi BM25**算法。这个算法是**Elasticsearch**和**Lucene**的默认算法。可以参考[**Pluggable Similarity Algorithms**](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/pluggable-similarites.html)获取更详细的资料。

classic：

**TF/IDF** 算法，也是**Elasticsearch**和**Lucene**的默认算法之一。可以参考 [**Lucene’s Practical Scoring Function**](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/practical-scoring-function.html) 获取更详细的资料。

**similarity**可以在字段第一次创建时在字段级别进行设置，如下：

```
curl -XPUT 'localhost:9200/my_index?pretty' -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "my_type": {
      "properties": {
        "default_field": { #1
          "type": "text"
        },
        "classic_field": {
          "type": "text",
          "similarity": "classic" #2
        }
      }
    }
  }
}
'
```

| 1 | **default\_field** 字段使用**BM25**匹配算法                    |
| - | ------------------------------------------------------ |
| 2 | **classic\_field** 字段使用**classic** 匹配算法（即**TF / IDF**） |
