当前位置: 首页 > 知识库问答 >
问题:

为什么用Edge Ngram analyzer进行弹性搜索时的补全暗示器比默认的索引大小多15到17倍

窦国源
2023-03-14

我正在实现多个字段的完成建议,有字母数字和冒号(AA:890090:XYZ:9090)。当我使用缺省分析器完成建议(简单分析器),我不能得到建议(AA:890),因为简单分析器标记字母表只。为了克服这个问题,我们使用了edge ngram analyzer,它解决了建议的问题,但索引大小比默认的analyzer多15到17倍。Foreg.默认分析器的索引大小约为3GB,而ngram分析器的索引大小为50 GB。

 {
  "settings": {
    "analysis": {
      "filter": {
        "ngram_filter": {
          "type": "edge_ngram",
          "min_gram": 3,
          "max_gram": 40
        }
      },
      "analyzer": {
        "ngram_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": [
            "lowercase",
            "ngram_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "field1Suggest": {
          "type": "completion",
          "analyzer": "ngram_analyzer",
          "search_analyzer": "whitespace"
        },
        "field2Suggest": {
          "type": "completion",
          "analyzer": "ngram_analyzer",
          "search_analyzer": "whitespace"
        }
      }
    }
  }
}

共有1个答案

古起运
2023-03-14

您可以检查analyze终结点以查看会发生什么。当进入多个单词的内容时,术语的数量大大增加。下面的行已经可以创建12个术语。

POST /posts/_analyze
{
  "explain": true,
  "field": "field1Suggest",
  "text": "green yellow red"
}

输出给出以下术语:

gre yel red
gre yell red
gre yello red
gre yellow red
gree yel red
gree yell red
gree yello red
gree yellow red
green yel red
green yell red
green yello red
green yellow red
 类似资料:
  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 我刚加入弹性搜索公司。而不知道如何在JSON请求中对索引和an类型发出正确的请求?(所以我不想像localhost:9200/myindex/mytype/_search那样在URL中使用索引和类型,而是向localhost:9200/_search发出JSON请求) 我试过这样的东西。但我得到的结果是'AAA'索引而不是'BBB'索引。如何只从bbb索引得到结果或者根本没有结果?

  • 在学习ElasticSearch的过程中,我偶然发现并没有得出最终结论。 ElasticSearch的最大碎片大小是多少

  • 我是弹性搜索新手,并且已经完成了类似mykong教程的基本教程 我对创建任何文档的一部分有疑问 创建操作示例插入包含 /mkyong/posts/1001和以下请求数据的新文档: 问题1:-ES是否会在上述文档的所有属性上创建反向索引,即默认情况下的标题/类别/已发布/作者,并提供全文搜索,还是需要明确提及? 问题2:-在上述示例中,我们已经有了唯一的\u id,即。如果我已经将其存储在DB中并生

  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢