Elasticsearch не анализируется, не работает в сортировке

Я добавил сопоставления для не проанализированного параметра вasticsearch, он не работает, когда я сортирую результаты, вот мое отображение показывает, когда я использую http://localhost:9200/_river/jdbc/_search

 "mappings": {
"jdbc": {
"dynamic_templates": [
{ "notanalyzed": {
"match":              "*",
"match_mapping_type": "string",
"mapping": {
"type":        "string",
"index":       "not_analyzed"}
}
}
]
}
}

Но когда я сортирую результаты, это будет воспринимать результаты как

http://localhost:9200/jdbc/_search?pretty=true&sort=field:asc

{
field: "McDermott Will Amery",
},
sort: [
"amery"]
}

Но мне нужно заказать результаты от A-Z от начального слова в поле

ОБНОВИТЬ: Спецификация реки в мета

http://localhost:9200/_river/jdbc/_meta

{
"_index": "_river",
"_type": "jdbc",
"_id": "_meta",
"_version": 1,
"found": true,
"_source": {
"type": "jdbc",
"jdbc": {
"driver": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://localhost:3306/dbname",
"user": "user",
"password": "pass",
"sql": "SQL QUERY",
"poll": "24h",
"strategy": "simple",
"scale": 0,
"autocommit": true,
"bulk_size": 5000,
"max_bulk_requests": 30,
"bulk_flush_interval": "5s",
"fetchsize": 100,
"max_rows": 149669,
"max_retries": 3,
"max_retries_wait": "10s",
"locale": "in",
"digesting": true
},
"mappings": {
"jdbc": {
"dynamic_templates": [
{
"notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"}
}
}
]
}
}
}
}

1

Решение

Я думаю, что ваша конфигурация не подходит для того, что вы хотите сделать. Давай начнем сначала. Во-первых, давайте удалим ваш _river индекс, и мы создадим его с нуля снова:

curl -XDELETE localhost:9200/_river

Теперь давайте создадим его снова, но на этот раз с помощью правильная конфигурация, т.е .:

  1. Ваше отображение должно быть в jdbc.type_mapping поле
  2. вам нужно указать цель index а также typeгде ваши данные будут храниться

Вот как это будет выглядеть

curl -XPUT 'localhost:9200/_river/jdbc/_meta' -d '{
"type" : "jdbc",
"jdbc": {
"driver": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://localhost:3306/dbname",
"user": "user",
"password": "pass",
"sql": "SQL QUERY",                  <-- add your SQL query
"poll": "24h",
"strategy": "simple",
"scale": 0,
"autocommit": true,
"bulk_size": 5000,
"max_bulk_requests": 30,
"bulk_flush_interval": "5s",
"fetchsize": 100,
"max_rows": 149669,
"max_retries": 3,
"max_retries_wait": "10s",
"locale": "in",
"digesting": true,
"index": "your_index",               <-- add this
"type": "your_type",                 <-- add this
"type_mapping": {                    <-- add your mapping here
"your_type": {                   <-- match this with "type" above
"dynamic_templates": [{
"notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"}
}
}]
}
}
}
}'

Затем, когда ваш запрос SQL выполняется, он будет хранить данные внутри your_index индексировать и использовать your_type тип отображения.

Наконец, вы можете искать ваши данные с помощью следующего запроса:

 curl -XGET 'http://localhost:9200/your_index/your_type/_search?pretty=true&sort=field:asc'

ОБНОВИТЬ

Вы также можете использовать следующее отображение, определяющее мультиполе. Тогда вы сможете сортировать по not_analyzed поле и поиск по analyzed один:

"dynamic_templates": [{
"multi": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"}
}
}
}
}]

Запрос на поле с именем field будет тогда

curl -XGET 'http://localhost:9200/your_index/your_type/_search?pretty=true&q=field:Luke&sort=field.raw:asc'
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]