搜索多个单词的行为不太清楚。我正在运行以下查询:
{
"score": 7.925287,
"text": "Yappies",
},
{
"score": 7.925287,
"text": "YourPetBuddy",
},
{
"score": 7.925287,
"text": "YourDog",
},
{
"score": 6.270683,
"text": "Testcat",
},
但搜索结果对我来说很奇怪:
BASE_SETTINGS = {
'settings': {
"number_of_shards": 1,
"number_of_replicas": 0,
'analysis': {
'filter': {
'autocomplete_filter': {
'type': 'edge_ngram',
'min_gram': 1,
'max_gram': 16
}
},
'analyzer': {
'autocomplete': {
'type': 'custom',
'tokenizer': "standard",
'filter': [
'lowercase',
'autocomplete_filter'
]
}
}
}
}
}
我使用以下设置:
'properties': {
field['name']: {
'type': 'text',
'analyzer': 'autocomplete',
'search_analyzer': 'standard'
} for field in MAPPING_FIELDS[index]['fields']
}
Testcat不应该得分更高吗?因为它与搜索字符串有更大的匹配
更新:对于搜索,我已经使用标准搜索分析器
#set($greet = $input.params('greet'))
#set($name = $input.params('username'))
{
#if($greet != "")
"greet": "$greet"
#if($name != "")
,
#end
#end
#if($name != "")
"name": "$name"
#end
}
如何将最高分数分配给最大前缀?
答案 0 :(得分:0)
我假设你的索引过程和搜索查询使用相同的分析器。通过索引,它为每个文档为该字段创建16克:
Testcat: t te tes ...
Yappies: y ya yap...
如果在搜索过程中不使用其他分析器,则对每个标记的查询都会发生同样的事情(由于标准标记化器而在空间上分割):
Testcat: t te tes ...
y: y
由于令牌数量庞大,很多文档都会受到影响我在这里猜测y
是您在该字段的索引中的更独特的标记因此,这些文件更具相关性。
尝试在不包含edge_ngram
过滤器的搜索过程中使用其他分析器,如下所述:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html