elasticsearch在搜索精确的词时找不到结果

v09wglhw  于 2022-12-11  发布在  ElasticSearch
关注(0)|答案(1)|浏览(146)

我正在使用nodejs应用中的elasticsearch模块使用模糊补全查询我的索引。我尝试搜索的文本是Rome–Fiumicino Leonardo da Vinci International Airport。当搜索这个词时,我没有得到任何结果,但如果我将这个词削减到50个字符,它确实找到了它并返回结果。

const result = await elasticsearch.search({

     index: 'myIndex',
      body: {
      suggest: {
       fuzzinessZero: {
        text,
        completion: {
          field: 'name_suggest',
          fuzzy: {
            fuzziness: 0,
          },
          contexts,
        },
      },
      fuzzinessOne: {
        text,
        completion: {
          field: 'name_suggest',
          fuzzy: {
            fuzziness: 1,
          },
          contexts,
        },
      },
      fuzzinessTwo: {
        text,
        completion: {
          field: 'name_suggest',
          fuzzy: {
            fuzziness: 2,
          },
          contexts,
        },
      },
    },
}
    })

这是我在fuzzinessOne

中得到的结果,正如你所看到的,text字段中的结果被削减到50个字符(可能这就是问题所在)。在_source中,我得到了所有用于搜索的输入,其中一个是我试图搜索的完整的确切术语,以及所有其他可用的组合。
值得一提的是,我使用的是AWS openSearch,这是我用来创建索引的设置:

settings: {
  analysis: {
    filter: {
      autocomplete_filter: {
        type: 'edge_ngram',
        min_gram: 2,
        max_gram: 20,
      },
      shingle_filter: {
        type: 'shingle',
        max_shingle_size: 3,
      },
    },
    analyzer: {
      autocomplete: {
        type: 'custom',
        tokenizer: 'standard',
        filter: ['lowercase', 'shingle_filter', 'asciifolding'],
      },
    },
  },
}
bqucvtff

bqucvtff1#

您遇到此问题的原因是max_input_length参数的默认值设置为50
以下是文档中对此参数的说明:
限制单个输入的长度,默认为50个UTF-16码位。此限制仅在索引时使用,以减少每个输入字符串的总字符数,从而防止大量输入使基础数据结构膨胀。大多数用例不会受默认值的影响,因为前缀完成很少超过前缀长度超过少数字符。
您可以使用此默认行为,也可以通过增加max_input_length参数值来更新索引Map,然后重新索引数据。

{
  "mappings": {
    "dynamic": "false",
    "properties": {
      "namesuggest": {
        "type": "completion",
        "analyzer": "keyword_lowercase_analyzer",
        "preserve_separators": true,
        "preserve_position_increments": true,
        "max_input_length": 100,
        "contexts": [
          {
            "name": "searchable",
            "type": "CATEGORY"
          }
        ]
      }
    }
  },
  "settings": {
    "index": {
      "mapping": {
        "ignore_malformed": "true"
      },
      "refresh_interval": "5s",
      "analysis": {
        "analyzer": {
          "keyword_lowercase_analyzer": {
            "filter": [
              "lowercase"
            ],
            "type": "custom",
            "tokenizer": "keyword"
          }
        }
      },
      "number_of_replicas": "0",
      "number_of_shards": "1"
    }
  }
}

相关问题