2016-08-17 2 views
0

Я новичок в поиске эластичности, и я экспериментировал с ним за последние несколько дней. Я не могу выполнить правильное сопоставление, поскольку все типы данных, упомянутые в сопоставлении, сопоставляются с типом «слово» вместо соответствующих типов. Вот отображение я сделалэластичный поиск «слово» тип данных: картирование некорректно

POST my_index 
{ 
"settings" : { 
"analysis" : { 
"analyzer" : { 
    "lowercase_analyzer" : { 
     "type" : "custom", 
     "tokenizer" : "keyword", 
     "filter" : ["lowercase"] 
    } 
    } 
} 
}, 
"mappings" : { 
"my_type" : { 
    "properties" : { 
    "name" : {"type" : "string" ,"index" : "not_analyzed" }, 
    "field0" : { 
     "properties" : { 
     "field1" : {"type" : "boolean" }, 
     "field2" : {"type" : "string" }, 
     "field3" : {"type" : "date", "format" : "yyyy-MM-dd HH:mm:ss SSSSSS" } 
     } 
    } 
    } 
} 
} 
} 

Чтобы проверить отображение, я использую «_analyze» апи следующим

GET my_index/_analyze 
{ 
    "field" : "name", 
    "text" : "10.90.99.6" 
} 

, который дает мне следующий результат

{ 
"tokens": [ 
{ 
    "token": "10.90.99.6", 
    "start_offset": 0, 
    "end_offset": 10, 
    "type": "word", 
    "position": 0 
} 
] 
} 

Я ожидая, что «тип» в результате будет «строка». Однако я не мог понять, почему он возвращает тип «слово». То же самое происходит и с другими полями, когда я отправляю данные типа boolean или метки времени во вложенных полях, используя _analyze api.

GET my_index/_analyze 
{ 
"field" : "field0.field1", 
"text" : "true" 
} 

Результат

{ 
    "tokens": [ 
    { 
    "token": "true", 
    "start_offset": 0, 
    "end_offset": 4, 
    "type": "word", 
    "position": 0 
    } 
    ] 
} 

Где я делаю неправильно в моем отображении.

Кроме того, такого типа данных «слова» нет в elastic search reference api.

ответ

2

Это совсем не ошибка, вы сделали это правильно. Концепция type в картировании и концепции type в API _analyze отличается.

API _analyze API просто вернет все маркеры, которые присутствуют в поле, которое вы анализируете, и каждый из этих токенов напечатан «слово». Это происходит из класса Lucene TypeAttribute, и, как вы можете видеть, есть только одно значение по умолчанию "word"

+0

Спасибо. Это помогло. –

+0

Прохладный. Рад, что это помогло! – Val

Смежные вопросы