elasticsearch ElasticSearch-使用缩写进行搜索,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch ElasticSearch-使用缩写进行搜索,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch ElasticSearch-使用缩写进行搜索

elasticsearch ElasticSearch-使用缩写进行搜索,elasticsearch,nest,elasticsearch,Nest,我正在尝试设置一个现有/自定义分析器,以便使用缩写进行搜索。例如,如果文本字段为“美国银行”,则搜索美国银行或美国银行、美国银行等应与此记录匹配 我该怎么做呢?您可能可以将令牌用于自定义分析器 例如,下面的映射 { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "standard", "f

我正在尝试设置一个现有/自定义分析器,以便使用缩写进行搜索。例如,如果文本字段为“美国银行”,则搜索美国银行或美国银行、美国银行等应与此记录匹配

我该怎么做呢?

您可能可以将令牌用于自定义分析器

例如,下面的映射

{
"settings": {
    "analysis": {
        "analyzer": {
            "my_analyzer": {
                "tokenizer": "standard",
                "filter": ["lowercase", "synonym_filter"]
            }
        },
        "filter": {
            "synonym_filter": {
                "type": "synonym",
                "synonyms": [
                    "bank of america,boa"
                ],
                "expand": true
            }
        }
    }
},
"mappings": {
    "document": {
        "properties": {
            "text": {
                "type": "text",
                "analyzer": "my_analyzer",
                "fielddata": true
            }
        }
    }
}
}

当然,您可以向列表中添加更多内容或使用同义词文件

对于查询用例BOfA或BOA,BOfA-可以使用两种方法

1) 更多的同义词与这些可能的组合

 "synonyms": [
                    "bank of america,boa"
                    "bank of america,bofa"
                ]
2) 或者保持摘要完整并使用模糊查询

{
  "query": {
    "match": {
      "text" : {
        "query": "bofa",
        "fuzziness": 2
      }
    }
  }
}

您将需要synoyms为ES提供摘要。

我使用pattern\u replace找出了一些接近的内容:

GET /_analyze
{
  "tokenizer": "keyword",
  "filter": [
    {
      "type": "pattern_replace",
      "pattern": "(\\B.)",
      "replacement": ""
    },
    {
      "type": "pattern_replace",
      "pattern": "(\\s)",
      "replacement": ""
    },
    "uppercase",
    {
      "type": "ngram",
      "min_gram": 3,
      "max_gram": 5
    }
  ],
  "text": "foxes jump lazy dogs"
}
产生:

{
  "tokens": [
    {
      "token": "FJL",
      "start_offset": 0,
      "end_offset": 20,
      "type": "word",
      "position": 0
    },
    {
      "token": "FJLD",
      "start_offset": 0,
      "end_offset": 20,
      "type": "word",
      "position": 0
    },
    {
      "token": "JLD",
      "start_offset": 0,
      "end_offset": 20,
      "type": "word",
      "position": 0
    }
  ]
}

user3775217的答案在回答您的问题时应进行检查。