【问题标题】:index letter by letter with elasticsearch in rails app在rails应用程序中使用elasticsearch逐字母索引
【发布时间】:2020-10-14 13:42:39
【问题描述】:

有谁知道在 elasticsearch 中逐字母索引数据的最佳方法是什么。我有 Rails 应用程序女巫,我在我的应用程序中使用弹性搜索作为搜索引擎。在我的 Rails 应用程序中,我有很多包含文章的内容,在我的实现中,我可以搜索文章并完美返回结果,我有多个过滤器,例如 ngram-edge gram-whitespace 和...。如果用户键入准确的完整单词,一切都很好,并且我的设计有一些像 ngram 这样的过滤器,在这种状态下,我想帮助用户,如果他/她键入一个字母,他/她可以返回一些结果,我可以使用 where 命令处理这个 ponit但我想用松紧带做。 我m looking through elastices tutorials and best practices but none of them cant 帮助我,如果用户键入至少三个或四个字母的弹力可以返回结果,这是最好的状态。 我正在使用 ngram 过滤器 边缘克过滤器 正则表达式 和 ... 但它们都没有用。

【问题讨论】:

  • 嗨,如果我理解得很好,你想要自动完成功能。我说的对吗?
  • 嗨,你说得对

标签: elasticsearch ruby-on-rails-5


【解决方案1】:

您需要在 elasticsearch 中使用suggest 查询,如下所示:

{
 "suggest": {
 "auto-complete-suggest": {
 "prefix": "Your prefix text",
 "completion": {
  "size" : 5,
  "field": "text_completion"
 
      }
    }
  }
}

你的映射会是这样的:

{
  "mappings": {
    "properties": {
      "text_completion": {
        "type": "completion",
        "analyzer": "Your analyzer"
      }
    }
  }
}

【讨论】:

  • 感谢您的回复,它解决了我的问题,但现在我有另一个问题,如果我使用 (where 命令),我得到了所有正确的结果,但现在对于某些查询结果完全不相关,对于某些查询它返回不可用的结果
  • 不客气!抱歉,我完全无法理解您的问题。你能给我举个例子吗?
  • 让我告诉你更多细节,我有标签模型女巫包含一些独特的名字,我预计当邮递员输入 b 时,所有结果都以 b 开头,但除了第一个结果之外,其他结果完全无关
  • 我再次检查,一切都是正确的。我添加了多条记录,它只是给了我相关的结果。您为此使用什么分析仪?
  • 这是,你建议 api,[[def multi_match { "multi_match": {"query": @query, "fields": %w[name],"fuzziness":'auto' } }end]] 这是我的映射 [[{"mappings": {"tags": "properties": {"name": {"type": "string }, }} }} ---- 我使用 edge -ngram 分析器
猜你喜欢
  • 2018-03-12
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多