Как использовать запрос термина, когда тип ключевого слова — текст в elasticsearch

#elasticsearch #elasticsearch-dsl

#elasticsearch #elasticsearch-dsl

Вопрос:

Привет, я создал сопоставление в elasticsearch для поля claimnumber, когда я использую для поиска термин с помощью запроса термина, он отлично работает для текста, полного цифр, но не работает для текстовой комбинации алфавита и цифр, например, работает для «123456», не работает для «CL123456»

отображение ниже

 {
  "duckcreek" : {
    "mappings" : {
      "properties" : {
        "@timestamp" : {
          "type" : "date"
        },
        "@version" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
          "claimnumber" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
          "id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "policynumber" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "url" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}
  

работа с числами

 GET duckcreek/_search
{
  "query": {
    "term": {
      "claimnumber": {
        "value": "99520"
      }
    }
  }
}
  

не работает текст с числами

 GET duckcreek/_search
{
  "query": {
    "term": {
      "claimnumber": {
        "value": "CL123456"
      }
    }
  }
}
  

Пожалуйста, предложите решение для решения этой проблемы?

Комментарии:

1. благодарим вас за принятие ответа 🙂 Можете ли вы, пожалуйста, также поддержать ответ

Ответ №1:

При выполнении анализа текстовой строки с помощью Analyze API

 GET /_analyze

{
  "analyzer" : "standard",
  "text" : "CL123456"
}
  

Генерируемые токены являются:

        {
            "tokens": [
                {
                    "token": "cl123456",
                    "start_offset": 0,
                    "end_offset": 8,
                    "type": "<ALPHANUM>",
                    "position": 0
                }
            ]
        }
  

Поисковый запрос

 {
  "query": {
    "term": {
      "title.keyword": {     <-- note this
        "value": "CL123456"
      }
    }
  }
}
  

Результат поиска

 "hits": [
      {
        "_index": "matchprase1",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.6931471,
        "_source": {
          "title": "CL123456"
        }
      }
    ]