gpt4 book ai didi

php - Elasticsearch-分数词匹配/部分词匹配

转载 作者:行者123 更新时间:2023-12-03 01:26:00 25 4
gpt4 key购买 nike

我是Elasticsearch的新手,我很难在结果上得到想要的分数。

这是我到目前为止获得的最佳工作选择。

$options['query']['bool']['should'][] = [
'match' => [
'my_long_textfield' => [
'query' => $query,
'operator' => 'AND',
'boost' => 15
]
]
];

$options['query']['bool']['should'][] = [
'match' => [
'my_long_textfield' => [
'query' => $query,
'minimum_should_match' => '80%'
]
]
];

示例数据集(两行):
my_long_textfield:
"some cars move fast"
"a car can move quickly"

如果我的查询是“car fast”,它将给第二行最高分,因为第一行包含“car”而不是“cars”。

我想给单词匹配以及部分单词打分。

因此,对于查询“car fast”,我们在单词“fast”上有一个匹配项,而“car”在第一行中几乎是一个单词匹配项。这应该比第二行中只有一个单词匹配更高。

如果有人能指出我正确的方向,将不胜感激。

最佳答案

解决问题的方法有很多,但最简单的方法是利用分析器。在您的情况下,您可以将my_long_textfield配置为使用 english language analyzer,除了删除停用词之外,它还会阻止(即为car编制索引cars),这是您在此处需要的(在进入模糊性之前)。

因此,首先使用适合该字段的分析器创建索引:

PUT test
{
"mappings": {
"properties": {
"my_long_textfield": {
"type": "text",
"analyzer": "english"
}
}
}
}

然后索引两个测试文档:
POST test/_doc/_bulk
{ "index": {}}
{ "my_long_textfield": "some cars move fast" }
{ "index": {}}
{ "my_long_textfield": "a car can move quickly" }

然后,您的查询将为您提供准确的期望,即第一个文档的得分高于第二个文档:
POST test/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"my_long_textfield": {
"query": "car fast",
"operator": "AND",
"boost": 15
}
}
},
{
"match": {
"my_long_textfield": {
"query": "car fast",
"minimum_should_match": "80%"
}
}
}
]
}
}
}

结果=>
"hits" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "w3uIlm0B0Vd4Dh649_Vg",
"_score" : 14.0075,
"_source" : {
"my_long_textfield" : "some cars move fast"
}
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "xHuIlm0B0Vd4Dh649_Vg",
"_score" : 0.18232156,
"_source" : {
"my_long_textfield" : "a car can move quickly"
}
}
]

如果再想一想,我们也可以添加 synonym token filter,因为 fastquick确实是同一回事,但这是另一回事。

关于php - Elasticsearch-分数词匹配/部分词匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58234932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com