gpt4 book ai didi

php - 在Elasticsearch中将没有空格的单词与带有空格的文本进行匹配

转载 作者:行者123 更新时间:2023-12-02 23:11:10 25 4
gpt4 key购买 nike

问题标题有点误导,但我不知道如何正确放置,但这是我的情况

在 flex 搜索的产品记录标题中,我有一个单词删除(请参阅中间的空格)。现在我需要将它与 waterwipes 匹配。因为之间没有空格,所以查询waterwipes的结果为零。以下是 flex 搜索中的必须匹配查询(我在这里使用PHP)

 $mustConditions = [
[
"nested" => [
"path" => "name",
"query" => [
"multi_match" => [
"query" => (string)$query,
"fields" => ['name.en^3', 'name.ar^3'],
"zero_terms_query" => "all",
"fuzziness" => "auto",
"operator" => "AND",
],
],
],
],
];

并且该 Realm 的分析仪是“英语”。如何匹配“水删除布”之类的单词?

最佳答案

您需要从产品标题中删除空格并将其编入索引,以后您就可以查询该单词了。

请查看用于删除空格的索引设置:{

    "settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"replace_whitespace"
]
}
},
"char_filter": {
"replace_whitespace": {
"type": "mapping",
"mappings": [
"\\u0020=>"
]
}
}
}
}
}

之后,您可以使用 ES analyze API确认其生成 token ,该 token 将与您的搜索查询 token 匹配。

POST _analyze
{
"text": "Water wipes",
"analyzer" : "my_analyzer"
}

{
"tokens": [
{
"token": "Waterwipes", --> Notice whitespace is removed
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
}
]
}

建议:您应该将这些除去空格的 token 存储在 title的另一个字段(例如 titlewospaces)中,并在其上面的自定义分析器上应用并在这两个字段上进行搜索以获得更好的结果。 另外,您应该检查Explain API以查看查询生成的 token 以及它与索引 token 的匹配方式。

关于php - 在Elasticsearch中将没有空格的单词与带有空格的文本进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60486670/

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