Я хочу настроить Elasticsearch, чтобы поиск «JaFNam» создавал хорошую оценку для «JavaFileName».
Я попытался создать анализатор, который объединяет анализатор CamelCase pattern
с токенизатором edge_ngram
. Я думал, что это создаст такие термины:
J F N Ja Fi Na Jav Fil Nam Java File Name
Но токенизатор, кажется, не имеет никакого эффекта: я продолжаю получать эти термины:
Java File Name
Как будет выглядеть правильная конфигурация Elasticsearch?
Пример кода:
curl -XPUT 'http://127.0.0.1:9010/hello?pretty=1' -d'
{
"settings":{
"analysis":{
"analyzer":{
"camel":{
"type":"pattern",
"pattern":"([^\\p{L}\\d]+)|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)|(?<=[\\p{L}&&[^\\p{Lu}]])(?=\\p{Lu})|(?<=\\p{Lu})(?=\\p{Lu}[\\p{L}&&[^\\p{Lu}]])",
"filters": ["edge_ngram"]
}
}
}
}
}
'
curl -XGET 'http://127.0.0.1:9010/hello/_analyze?pretty=1' -d'
{
"analyzer":"camel",
"text":"JavaFileName"
}'
приводит к:
{
"tokens" : [ {
"token" : "java",
"start_offset" : 0,
"end_offset" : 4,
"type" : "word",
"position" : 0
}, {
"token" : "file",
"start_offset" : 4,
"end_offset" : 8,
"type" : "word",
"position" : 1
}, {
"token" : "name",
"start_offset" : 8,
"end_offset" : 12,
"type" : "word",
"position" : 2
} ]
}
pattern
илиedge_ngram
, но не оба одновременно. Кроме того, я не уверен, почему регистр символов должен иметь значение. Насколько это отличается от поискаJaFNam
илиjafnam
? - person Val   schedule 18.01.2017JaFNam
иjafnam
по-разному. Я хочу использовать то же поведение для моего поиска. - person slartidan   schedule 18.01.2017edge_ngram
фильтр вместо токенизатораedge_ngram
для достижения желаемого поведения? - person slartidan   schedule 18.01.2017edge_ngram
, можешь попробовать - person Val   schedule 18.01.2017tokenizer
и массивfilter
, так как это ваш анализатор не работает. - person Val   schedule 18.01.2017