首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在elasticsearch中获得同义词匹配的自动建议

如何在elasticsearch中获得同义词匹配的自动建议
EN

Stack Overflow用户
提问于 2021-03-05 18:34:04
回答 1查看 383关注 0票数 1

我正在使用下面的代码,当我输入“cu”时,它并没有给出自动建议作为curd

但它确实与酸奶相匹配,这是正确的。如何实现同义词词的自动完成和相同的文档匹配?

代码语言:javascript
复制
PUT products
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "synonym_analyzer": {
            "tokenizer": "standard",
            "filter": [
            "lowercase",
              "synonym_graph"
            ]
          }
        },
        "filter": {
          "synonym_graph": {
            "type": "synonym_graph",
            "synonyms": [
               "yogurt, curd, dahi"
            ]
          }
        }
      }
    }
  }
}
代码语言:javascript
复制
PUT products/_mapping
{
  "properties": {
    "description": {
      "type": "text",
      "analyzer": "synonym_analyzer"
    }
  }
}
代码语言:javascript
复制
POST products/_doc
{
  "description": "yogurt"
}
代码语言:javascript
复制
GET products/_search
{
  "query": {
    "match": {
      "description": "cu"
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-06 09:43:28

当您在synonym_graph过滤器中提供同义词列表时,它仅仅意味着ES将交替地对待任何同义词。但是当通过分析器对它们进行分析时,只有全词标记 将产生

代码语言:javascript
复制
POST products/_analyze?filter_path=tokens.token
{
  "text": "yogurt",
  "field": "description"
}

屈服:

代码语言:javascript
复制
{
  "tokens" : [
    {
      "token" : "curd"
    },
    {
      "token" : "dahi"
    },
    {
      "token" : "yogurt"
    }
  ]
}

因此,常规的match_query不会在这里剪切它,因为标准分析器没有为它提供足够的可匹配子字符串(N克)上下文。

同时,您可以将match替换为match_phrase_prefix,这完全是您所追求的--匹配一个有序的字符序列,同时考虑到同义词:

代码语言:javascript
复制
GET products/_search
{
  "query": {
    "match_phrase_prefix": {
      "description": "cu"
    }
  }
}

但是,正如查询名称所暗示的那样,这只适用于前缀。如果您想要一个建议术语的自动完成,而不管子字符串匹配发生在哪里,,请看我的另一个答案--i 谈谈如何利用n-g

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66497829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档