【问题标题】:Elasticsearch : Completion suggester not working with whitespace AnalyzerElasticsearch:完成建议不与空白分析器一起使用
【发布时间】:2018-06-26 12:49:13
【问题描述】:

我是 Elastic 搜索的新手,我正在尝试使用 whitespace Analyzer 创建一个 CompletionSuggester 演示。

根据Whitespace Analyzer 的文档,它会破坏文本 每当它遇到一个空白字符时。所以我的 问题是它是否也适用于完成建议?

所以对于我的完成建议前缀:“ela”, 我期待输出 作为“你好弹性搜索”。

我知道一个简单的解决方案是将多字段输入添加为:

"suggest": {
         "input": ["Hello","elastic","search"]
 }

但是,如果这是解决方案,那么使用分析器的意义是什么?分析器在完成建议中有意义吗?

我的映射:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "completion_analyzer": {
          "type": "custom",
          "filter": [
            "lowercase"
          ],
          "tokenizer": "whitespace"
        }
      }
    }
  },
  "mappings": {
            "my-type": {
                "properties": {
                    "mytext": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "suggest": {
                        "type": "completion",
                        "analyzer": "completion_analyzer",
                        "search_analyzer": "completion_analyzer",
                        "max_input_length": 50
                    }
                }
            }
        }
}

我的文档:

{
    "_index": "my-index",
    "_type": "my-type",
    "_id": "KTWJBGEBQk_Zl_sQdo9N",
    "_score": 1,
    "_source": {
        "mytext": "dummy text",
        "suggest": {
                 "input": "Hello elastic search."
        }
    }
}

搜索请求:

{
    "suggest": {
        "test-suggest" : {
        "prefix" :"ela", 
        "completion" : { 
            "field" : "suggest",
            "skip_duplicates": true
        }
        }
    }
}

这个搜索没有返回正确的输出,但是如果我使用 prefix = 'hel' 我得到正确的输出:“Hello elastic search。”

简而言之,我想知道空白分析器是否与完成建议器一起使用? 如果有办法,请给我建议。

PS:我已经在寻找这个链接,但我没有找到有用的答案。

ElasticSearch completion suggester Standard Analyzer not working

What Elasticsearch Analyzer to use for this completion suggester?

我发现此链接很有用Word-oriented completion suggester (ElasticSearch 5.x)。但是他们没有使用完成建议。

提前致谢。

吉米

【问题讨论】:

  • 我在使用自定义分析器时遇到了完全相同的问题,似乎完成没有以某种方式考虑分析器的输出
  • 是的,完成建议器中的分析器有问题。最后我最终使用替代解决方案在输入数组中添加多个标签而不是预期的方法。
  • 我正在为我的用例探索的是 nGram。
  • @pcambra 哦,好吧。我用 edge-ngrams 尝试了上述方法,它工作正常。你可以试试这个链接stackoverflow.com/questions/41744712/…我实施了接受答案中给出的程序,它很适合我的要求。唯一的问题是我们不能用 ngram 跳过重复。

标签: elasticsearch autocomplete autosuggest elasticsearch-analyzers elasticsearch-6


【解决方案1】:

补全建议器无法进行全文查询,这意味着它无法根据多词字段中间的单词返回建议。

来自ElasticSearch 自己:

原因是 FST 查询与全文查询不同。我们在短语中的任何地方都找不到单词。相反,我们必须从图表的左侧开始向右移动。

正如您所发现的,可以匹配字段中间的补全建议器的最佳替代方案是边缘 n-gram 过滤器。

【讨论】:

    【解决方案2】:

    g我知道这个问题已经很久了,但是你有没有试过有多个建议,一个基于前缀,下一个基于正则表达式?

    类似

    {
        "suggest": {
            "test-suggest-exact" : {
                "prefix" :"ela", 
                "completion" : { 
                    "field" : "suggest",
                    "skip_duplicates": true
                }
            },
            "test-suggest-regex" : {
                "regex" :".*ela.*", 
                "completion" : { 
                    "field" : "suggest",
                    "skip_duplicates": true
                }
            }
        }
    }
    

    当第一个为空时,使用第二个建议的结果。好消息是 Elasticsearch 建议返回有意义的短语。

    基于 Shingle 的方法,使用完整的查询搜索,然后根据搜索词进行聚合,有时会给出上下文错误的断词。如果你有兴趣,我可以写更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多