The similarity algorithm can be set on a per-field basis. It’s just a matter of specifying the chosen algorithm in the field’s mapping:
PUT /my_index
{
"mappings": {
"doc": {
"properties": {
"title": {
"type": "string",
"similarity": "BM25" (1)
},
"body": {
"type": "string",
"similarity": "default" (2)
}
}
}
}
-
The
title
field uses BM25 similarity. -
The
body
field uses the default similarity (see [practical-scoring-function]).
Currently, it is not possible to change the similarity
mapping for an
existing field. You would need to reindex your data in order to do that.
Configuring a similarity is much like configuring an analyzer. Custom similarities can be specified when creating an index. For instance:
PUT /my_index
{
"settings": {
"similarity": {
"my_bm25": { (1)
"type": "BM25",
"b": 0 (2)
}
}
},
"mappings": {
"doc": {
"properties": {
"title": {
"type": "string",
"similarity": "my_bm25" (3)
},
"body": {
"type": "string",
"similarity": "BM25" (4)
}
}
}
}
}
-
Create a custom similarity called
my_bm25
, based on the built-inBM25
similarity. -
Disable field-length normalization. See [bm25-tunability].
-
Field
title
uses the custom similaritymy_bm25
. -
Field
body
uses the built-in similarityBM25
.
Tip
|
A custom similarity can be updated by closing the index, updating the index settings, and reopening the index. This allows you to experiment with different configurations without having to reindex your documents. |