PUT /my_index
{
"mappings": {
"doc": {
"properties": {
"title": {
"type": "string",
"similarity": "BM25" (1)
},
"body": {
"type": "string",
"similarity": "default" (2)
}
}
}
}
Changing Similarities
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:
-
The
titlefield uses BM25 similarity. -
The
bodyfield 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 BM25
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-inBM25similarity. -
Disable field-length normalization. See [bm25-tunability].
-
Field
titleuses the custom similaritymy_bm25. -
Field
bodyuses 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. |