gpt4 book ai didi

elasticsearch - 在ElasticSearch中启用自动完成查询

转载 作者:行者123 更新时间:2023-12-02 22:55:26 24 4
gpt4 key购买 nike

我正在尝试建立一个ElasticSearch索引,该索引将包含带有产品名称的文档,例如笔记本电脑-

{ "name" : "Laptop Blue I7"}

然后,我想通过查询ES索引将其用于自动完成建议。我有2个主要限制:
  • 名称的同义词-

  • 我想为术语定义同义词,例如为“笔记本电脑”定义“笔记本”
    摄取的文件可以是以下几种:
    "Laptop Blue I7"
    "Laptop Blue I7"
    "Laptop Blue I7"
    "Laptop Blue I7"
    "Laptop Red I7"
    "Laptop Red I7"
    "Notebook Blue I7"

    现在,我在创建索引时添加以下设置和映射文件-
    {
    "settings": {
    "index": {
    "analysis": {
    "filter" : {
    "synonym" : {
    "type" : "synonym",
    "synonyms" : ["Laptop,Notebook"]
    }
    },
    "analyzer": {
    "synonym" : {
    "tokenizer" : "keyword",
    "filter" : ["synonym"]
    }
    }}}},
    "mappings": {
    "catalog": {
    "properties": {
    "name": {
    "type": "text",
    "analyzer": "synonym"
    }
    }
    }
    }
    }

  • 查询-

  • 当我用“笔记本”查询数据时,
    首选响应应按照频率和同义词排序。但是,当我查询时,响应通常独立于同义词和频率。我使用以下查询-
    /_search
    {"query": {
    "query_string" : {"default_field" : "name", "query" : "Notebook"}
    } }

    我得到的答复是-
    "Notebook Blue I7"

    虽然我希望回应是以下任何一种-
    "Laptop Blue I7"
    "Laptop Red I7"

    要么
    "Notebook Blue I7"
    "Laptop Blue I7"
    "Laptop Red I7"

    解决这个问题的任何见解都会有所帮助。谢谢

    ========
    编辑1:

    当我在“笔记本”上使用 \_analyze时,响应为
    {'tokens': [{'end_offset': 3,
    'position': 0,
    'start_offset': 0,
    'token': 'Notebook',
    'type': '<ALPHANUM>'},
    {'end_offset': 3,
    'position': 0,
    'start_offset': 0,
    'token': 'Laptop',
    'type': 'SYNONYM'}]}

    最佳答案

    问题是在keyword分析器中使用的synonym标记程序。请执行以下操作来调试您的问题。

  • 使用analyze API检查为您的匹配和不匹配文档生成的 token 。
  • 使用explain API,了解其如何生成 token 以及如何与反向索引匹配。

  • 如果在反向索引中为您的文档生成的标记与从您的搜索词生成的标记匹配,则elasticsearch将显示它已匹配,并解释查询给出了许多其他信息,例如分片中有多少个文档与搜索词及其得分匹配

    上面只是解决问题的非常基本的步骤,但是您尚未实现适当的自动完成搜索,因此在您的情况下反过来应该返回 notelapt的结果。要实现此目的,您需要使用 edge n gram分析器,并且 this ES官方帖子可以帮助您实现此目的。

    如果您遇到任何其他问题或需要任何说明,请告诉我。

    关于elasticsearch - 在ElasticSearch中启用自动完成查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56322628/

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