关键词搜索
默认情况下,UDB-SX 使用 Okapi BM25 算法计算文档得分。BM25 是一种基于关键词的算法,对查询中出现的词语执行词汇搜索。
在确定文档相关性时,BM25 考虑词频/逆文档频率 (TF/IDF):
词频 规定搜索词出现次数越多的文档相关性越高。
逆文档频率 对语料库所有文档中常见词语(例如,“the”这样的冠词)赋予较低的权重。
示例
以下示例查询在 shakespeare 索引中搜索词语 long live king:
GET shakespeare/_search
{
"query": {
"match": {
"text_entry": "long live king"
}
}
}
响应包含匹配的文档,每个文档在 _score 字段中都有一个相关性得分:
{
"took": 113,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2352,
"relation": "eq"
},
"max_score": 18.781435,
"hits": [
{
"_index": "shakespeare",
"_id": "32437",
"_score": 18.781435,
"_source": {
"type": "line",
"line_id": 32438,
"play_name": "Hamlet",
"speech_number": 3,
"line_number": "1.1.3",
"speaker": "BERNARDO",
"text_entry": "Long live the king!"
}
},
{
"_index": "shakespeare",
"_id": "83798",
"_score": 16.523308,
"_source": {
"type": "line",
"line_id": 83799,
"play_name": "Richard III",
"speech_number": 42,
"line_number": "3.7.242",
"speaker": "BUCKINGHAM",
"text_entry": "Long live Richard, Englands royal king!"
}
},
{
"_index": "shakespeare",
"_id": "82994",
"_score": 15.588365,
"_source": {
"type": "line",
"line_id": 82995,
"play_name": "Richard III",
"speech_number": 24,
"line_number": "3.1.80",
"speaker": "GLOUCESTER",
"text_entry": "live long."
}
},
{
"_index": "shakespeare",
"_id": "7199",
"_score": 15.586321,
"_source": {
"type": "line",
"line_id": 7200,
"play_name": "Henry VI Part 2",
"speech_number": 12,
"line_number": "2.2.64",
"speaker": "BOTH",
"text_entry": "Long live our sovereign Richard, Englands king!"
}
}
...
]
}
}
相似性算法
下表列出了支持的相似性算法。
| 算法 | 描述 |
|---|---|
BM25 |
默认的 UDB-SX Okapi BM25 相似性算法。 |
boolean |
为词条分配等于其提升值的得分。当您希望文档得分基于词条是否匹配的二元值时,使用 boolean 相似性。 |
指定相似性算法
您可以在字段级别配置映射时,在 similarity 参数中指定相似性算法。
例如,以下查询为 boolean_field 指定 boolean 相似性。bm25_field 被分配默认的 BM25 相似性:
PUT /testindex
{
"mappings": {
"properties": {
"bm25_field": {
"type": "text"
},
"boolean_field": {
"type": "text",
"similarity": "boolean"
}
}
}
}
配置 BM25 相似性参数
您可以在索引级别配置 BM25 相似性参数,如下所示:
PUT /testindex
{
"settings": {
"index": {
"similarity": {
"custom_similarity": {
"type": "BM25",
"k1": 1.2,
"b": 0.75,
"discount_overlaps": "true"
}
}
}
}
}
BM25 相似性支持以下参数。
| 参数 | 数据类型 | 描述 |
|---|---|---|
k1 |
浮点数 | 确定非线性词频归一化(饱和)特性。默认值为 1.2。 |
b |
浮点数 | 确定文档长度对 TF 值的归一化程度。默认值为 0.75。 |
discount_overlaps |
布尔值 | 确定在计算范数时是否忽略重叠词条(位置增量为零的词条)。默认为 true(计算范数时不计算重叠词条)。 |