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

在elasticsearch中使用3的边缘ngram时如何匹配1-2个字符的精确匹配

谢昂雄
2023-03-14

我使用elasticsearch查询带有模糊匹配的索引。我使用的是一个最小克长度为3的边缘ngram标记器。

但是,对于仅包含1或2个字符的查询,这不会返回任何结果。是否可以仅对这1个或2个字符进行精确匹配,但对具有3个或更多字符的查询使用边缘非负RAM?

这是我当前的elasticsearch索引映射:

curl -XPUT 'http://localhost:9200/person' -d '{
"settings": {
    "number_of_shards": 1,
    "analysis": {
        "filter": {
            "autocomplete_filter": {
                "type":     "edge_ngram",
                "min_gram": 3,
                "max_gram": 20
            }
        },
        "analyzer": {
            "default": {
                "type":      "custom",
                "tokenizer": "standard",
                "filter": [
                    "lowercase",
                    "autocomplete_filter"
                ]
            }
        }
    }
}
}'

要查询此索引,请求如下:

curl -XPOST 'localhost:9200/person/type/_search' -d '{
    "query": {
        "match": {
            "_all": "Tim”
        }
    }
}'

产生了大量的结果,但是像这样的请求

curl -XPOST 'localhost:9200/person/type/_search' -d '{
    "query": {
        "match": {
            "_all": "Ti”
        }
    }
}'

给出一个空集。理想情况下,如果索引中有人名为Tim,第二个请求将返回一些结果。

共有1个答案

符学
2023-03-14

我不确定这是否能满足你的所有要求。您可以检查用户输入的长度是否小于3,然后启动以下查询。

{
  "query": {
    "match_phrase_prefix": {
      "_all": "ti"
    }
  }
}
 类似资料:
  • 我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:

  • 问题内容: 我想在一个字段中搜索“ vision”项目,但是通过在DSL中使用match / match_phrace / term,我只得到了“ vision A”,“ vision B”,“ xx版本”,“ vision”等结果。 我想要的是精确匹配“视觉”应该获得最高分,而包含“视觉”的项目应该排在精确匹配之后。排名应该是: 我检查了Elasticsearch匹配精确术语其中识别出将“索引”

  • 我正在尝试创建一个Lucene4.10索引。我只想在索引中保存我放入文档的确切字符串,witout标记化。 我在用StandardAnalyzer。 我试图搜索术语“燃料箱容量”@en(包括引号),所以我试图省略它们,并在术语周围添加了另外几个引号,以便让lucene理解我正在搜索整个文本。 如果我打印查询,我会得到:3:“燃料箱容量en”,但我不想拆分@符号上的文本。 我认为我的第一个问题是St

  • 问题内容: 有没有办法让ElasticSearch在分析的字段上识别完全匹配?理想情况下,我想小写,标记化,词干化,甚至对我的文档进行语音化,然后让查询提取“精确”匹配项。 我的意思是,如果我索引“汉堡包”和“汉堡包”,它们将被分析为[“汉堡包”,“小圆面包”]和[“汉堡包”]。如果我搜索“汉堡”,它将仅返回“汉堡”文档,因为这是“完全匹配”。 我尝试使用关键字标记器,但不会阻止各个标记。我是否需

  • 有什么regex我可以用来匹配正好10位数的块吗?例如,我有以下内容: 当给定时,这与匹配,但当给定时,这也与匹配,这是我不想要的。

  • 问题内容: 我有一个oracle表,该表具有名为system_access的列,该列具有以下数据: 基于上述示例数据,我不确定我的查询仅检索与“只读”和/或“只读”的确切单词匹配的记录 我不需要具有“只读(否)”,后接空格或方括号的记录,或“只读(请参阅mgr)”,其后或接续无空格和括号的记录。 因此,根据以上示例数据,我只会返回两行,即: 如前所述,只有与字符串“ Read Only”或“ re