【问题标题】:Ngram Tokenizer on field, not on queryNgram Tokenizer 在字段上,而不是在查询上
【发布时间】:2017-01-09 16:12:56
【问题描述】:

我在这里找不到用例的解决方案。 基本上,这很简单:我需要执行“包含”查询,例如 SQL like '%...%'

我已经看到有一个正则表达式查询,我实际上设法让它完美地工作,但由于它的扩展性似乎很差,我正在尝试 nGrams。现在,我以前玩过它们并且知道“它们是如何工作的”,但这种行为并不是我所期望的。

基本上,我已将分析器配置为 mingram = 2,maxgram = 20。假设我索引了一个名为“Christophe”的用户。我希望查询“Chris”真正匹配,因为 Chris 是 5 克的 Christophe。问题是,“Risotto”也匹配,因为它被分解成 Ngram,最终“is”是 2-gram 的“Christophe”,所以它也匹配。

我需要的是分析器在索引时实际分解 nGrams 中的索引字段,并将它们与全文查询进行比较。 Risotto 应该匹配 Risotto、XXXRisottoXXX 等,但不是 Risolo 或 nGram 匹配的东西。

有什么解决办法吗?

【问题讨论】:

标签: elasticsearch n-gram


【解决方案1】:

您需要使用search_analyzer 设置来拥有不同的索引时间和搜索时间分析器。

来自文档的示例:

"mappings": {
  "my_type": {
    "properties": {
      "text": {
        "type": "text",
        "analyzer": "autocomplete", 
        "search_analyzer": "standard" 
      }
    }
  }
}

【讨论】:

  • 我已经尝试过这个解决方案,当我只输入一个单词时,它似乎就像一个魅力,例如Chris 为 Christophe,但当我键入 Chris Sch 时,他找不到唱片 Christophe Schutz。我在姓氏和名字上都使用了多重匹配查询,并且在两个字段上都添加了 search_analyzer。有什么线索吗?
猜你喜欢
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 2017-02-16
  • 2021-07-04
  • 2010-09-14
  • 1970-01-01
  • 2015-04-09
  • 2021-09-02
相关资源
最近更新 更多