gpt4 book ai didi

elasticsearch - 用Elasticsearch进行产品搜索

转载 作者:行者123 更新时间:2023-12-02 22:40:58 25 4
gpt4 key购买 nike

我是Elasticsearch的新手,我想搜索带有品牌和类型名称的产品。
我已经尝试了一些,但是我想我缺少使用可靠搜索算法的重要内容。这是我的方法:

产品外观例如像这样:

{
brandName: "Samsung",
typeName: "PS-50Q7HX",
...
}

我将有一个输入字段。用户只能搜索品牌/类型,也可以搜索与类型名称结合的品牌。例如。
Samsung | Samsung PS-50Q7HX | PS-50Q7HX

为了消除typeName字段中的错误键入,我使用了ngram标记器,该标记器在仅搜索类型时效果很好。但是,与brandName字段结合使用时,我会遇到麻烦。使用类似这样的方法不能很好地工作(特别是当我也在brandName字段上使用ngram标记器时):
{
"query" : {
"multi_match" : {
"query": "Samsung PS 50Q 7HX",
"type": "cross_fields",
"fields": ["brandName", "typeName"]
}
}
}

当然,我知道为什么两个ngram标记器和一个混合字段不能很好地解决这个问题,但是我不确定如何最好地解决这个问题。

我认为主要的问题是我不知道用户是否输入了品牌名称,并且我考虑使用第二个索引来填充所有可用的品牌,我使用该索引对最终给定的品牌进行“预搜索”我的查询字符串中的名称。如果找到匹配项,则可以将搜索字符串分为类型和品牌名称,然后执行更具体的搜索。像这个
{
"query": {
"bool": {
"must": [
{ "match": { "brandName": "Samsung" } },
{ "match": { "typeName": "PS-50Q7HX" } }
]
}
}
}

这听起来是个好方法吗?还是有人看到更好的方法?

任何帮助表示赞赏!

致以最诚挚的谢意,

斯特凡

最佳答案

  • 为了消除用户的错字,您使用了ngram分析器,它是一个昂贵的分析器。您可以使用stem分析器,它提供了一些灵活的选项来消除输入错误
  • 根据我的关注,您可以将其作为单个字段而不是在2个不同的字段中建立索引。

  • ex:- "FIELD_NAME": "Samsung|PS-50Q7HX"


    我使用 Brand nameProduct name|与一些分隔符。使用定界符分析此字段值。因此您的内容数据将按如下所示编制索引

    Samsung

    PS-50Q7HX


    然后您可以通过以下查询进行搜索
    {
    "query": {
    "query-string": {
    "query": "Samsung PS-50Q7HX",
    "default_operator": "or",
    "fields": [
    "FIELD_NAME"
    ]
    }
    }
    }
    这将从索引中检索品牌名称为 samsung或产品名称为 PS-50Q7Hx的文档。您可以使用 prefix搜索,如果您使用 default_operator作为 and,则搜索将最为准确。

    关于elasticsearch - 用Elasticsearch进行产品搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30460748/

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