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

按一个字母搜索

钱和安
2023-03-14

我有一个这样设置的索引:

settings: {
index.analysis.analyzer.eng_search_analyzer.filter.0: lowercase
index.analysis.analyzer.eng_search_analyzer.filter.1: icu_folding
index.analysis.analyzer.eng_search_analyzer.char_filter.0: html_strip
index.analysis.filter.eng_ngram_filter.type: nGram
index.analysis.filter.eng_ngram_filter.min_gram: 1
index.analysis.analyzer.eng_search_analyzer.tokenizer: whitespace
index.analysis.analyzer.eng_search_analyzer.filter.2: icu_normalizer
index.analysis.analyzer.eng_index_analyzer.filter.1: eng_ngram_filter
index.analysis.analyzer.eng_index_analyzer.filter.0: lowercase
index.number_of_shards: 2
index.analysis.filter.eng_ngram_filter.token_chars.1: digit
index.analysis.filter.eng_ngram_filter.token_chars.0: letter
index.analysis.filter.eng_ngram_filter.token_chars.3: symbol
index.analysis.filter.eng_ngram_filter.token_chars.2: punctuation
index.analysis.analyzer.eng_index_analyzer.type: custom
index.analysis.analyzer.eng_index_analyzer.char_filter.0: html_strip
index.analysis.analyzer.eng_index_analyzer.filter.3: icu_normalizer
index.analysis.filter.eng_ngram_filter.max_gram: 20
index.analysis.analyzer.eng_index_analyzer.filter.2: icu_folding
index.number_of_replicas: 1
index.analysis.analyzer.eng_index_analyzer.tokenizer: whitespace
index.analysis.analyzer.eng_search_analyzer.type: custom
index.version.created: 900799
index.uuid: -O-iV6ZIQh6gk1204Ec1ig
}

几个重要字段的字段映射设置如下:

{
  "name": {
    "type": "multi_field",
    "fields": {
      "name": {
        "type": "string",
        "index": "not_analyzed",
        "omit_norms": "true",
        "index_options": "docs",
        "null_value": ""
      },
      "analyzed": {
        "type": "string",
        "index_analyzer": "eng_index_analyzer",
        "search_analyzer": "eng_search_analyzer",
        "null_value": "",
        "include_in_all": "false"
      }
    }
  }
}

当我询问名字时。对字段进行分析后,它适用于至少包含两个字符的任何内容。例如,查询“Ra”将在名称字段中找到带有“Rafael”的文档。然而,当我查询“R”或“Rafael S”时,它不会返回任何结果。应该注意的是,在我们的查询中,空格被处理为“AND”操作符,而不是“OR”,因此基本上查询词被处理为“name contains[search term]”。

如何配置字段或分析器,以便搜索单个字母?

共有1个答案

南宫森
2023-03-14

很难说没有看到查询,但根据弹性论坛上的讨论,如果您使用匹配短语前缀查询,您可能会通过增加查询的“max\u expansions”属性获得一些成功,尽管这会降低速度。

“最大扩展数”:10000

该线程中的另一个潜在解决方案是将操作符默认操作符设置为”和“(我认为您已经完成了)。

 类似资料:
  • 我的Sql查询不正确。我想创建一个查询,搜索前三个字符等于给定参数的公司 我的错误:

  • 问题内容: 我有字母“ a”,“ b”,“ c”。我希望我的结果在TSQL中分别为“ b”,“ c”,“ d”。我会用什么来实现这一目标? 问题答案: 使用得到字符的值,增加一个,并使用转换的值返回到一个字符。

  • null null 我想在ng-pattern中使用这个regex来检查来自用户的文本输入。

  • 谁能帮我用一个正则表达式来允许至少一个特殊字符,一个大写字母,一个小写字母。 这是我到目前为止所拥有的: 但它似乎只按“特殊字符”、“大写”、“小写”的顺序匹配字符。 非常感谢您的帮助

  • 我想用文本视图做打字机效果的淡入淡出。具体来说,我的活动收到一个带有一些文本的意图,我想让它在文本视图中逐个字母地显示文本: H他她在这里... 我找到了这个很棒的GitHub库,这正是我想要的,但是我很难将它合并到我的项目中,因为它太旧了。有什么方法可以将旧的库导入我的项目中吗? 我正在使用Android Studio Bumblebee 2021.1.1补丁2,Gradle 7.2和Java1

  • 问题内容: 我们正在实现一个搜索应用程序 我们通过以下sql查询实现了精确的词搜索 现在效果很好,我们在某些字段中还有另一个要求,即在jr_title字段中,如果用户填写了一封丢失的字母或一个字母的错误或一个额外的字母,例如,如果用户键入restauran,restaunts或restaurants,则应该给出结果,但不超过一个字母。 问题答案: 这将在搜索字符串之前允许一个字母数字字符,在搜索字