Это не как документ лексемы на моем конце with that analyzer:
curl -XGET localhost:9200/_analyze?tokenizer=keyword\&filters=trim,lowercase\&pretty -d '1%2fPJJP3JV2C24iDfEu9XpHBaYxXh%2fdHTbmchB35SDznXO2g8Vz4D7GTIvY54iMiX_149c95f02a8'
{
"tokens" : [ {
"token" : "1%2fpjjp3jv2c24idfeu9xphbayxxh%2fdhtbmchb35sdznxo2g8vz4d7gtivy54imix_149c95f02a8",
"start_offset" : 0,
"end_offset" : 80,
"type" : "word",
"position" : 1
} ]
}
Чтение выходного сигнала анализатора выше, ваш пример текст преобразуется в один строчной но-иначе идентичный знак данного показанный анализатор. Вы уверены, что в игре нет фильтра символов? Именно это и сделает HTML-кодирование.
Вы должны быть в состоянии запустить его как:
curl -XGET localhost:9200/sample/_analyze?field=message' -d 'text to analyze'
Поскольку не воспроизводя с анализатором непосредственно, я пытался воспроизвести это на моем конце, создав индекс, чтобы проверить его:
curl -XPUT localhost:9200/indexed-analysis -d '
{
"settings": {
"number_of_shards" : 1,
"number_of_replicas" : 0,
"index": {
"analysis": {
"analyzer": {
"default": {
"type": "custom",
"tokenizer": "keyword",
"filter": ["trim", "lowercase"]
}
}
}
}
},
"mappings": {
"indexed" : {
"properties": {
"text" : { "type" : "string" }
}
}
}
}'
curl -XPUT localhost:9200/indexed-analysis/indexed/1 -d '{
"text" :
"1%2fPJJP3JV2C24iDfEu9XpHBaYxXh%2fdHTbmchB35SDznXO2g8Vz4D7GTIvY54iMiX_149c95f02a8"
}'
curl -XGET localhost:9200/indexed-analysis/indexed/1?pretty
Это произвело правильно, идентичный результат:
{
"_index" : "indexed-analysis",
"_type" : "indexed",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source":{
"text" : "1%2fPJJP3JV2C24iDfEu9XpHBaYxXh%2fdHTbmchB35SDznXO2g8Vz4D7GTIvY54iMiX_149c95f02a8"
}
}
Итак, я попробовал _search
для этого, и я нашел его соответствующим образом.
curl -XGET localhost:9200/indexed-analysis/_search -d '{
"query": {
"match": {
"text": "1%2fPJJP3JV2C24iDfEu9XpHBaYxXh%2fdHTbmchB35SDznXO2g8Vz4D7GTIvY54iMiX_149c95f02a8"
}
}
}'
Результат:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.30685282,
"hits": [
{
"_index": "indexed-analysis",
"_type": "indexed",
"_id": "1",
"_score": 0.30685282,
"_source": {
"text": "1%2fPJJP3JV2C24iDfEu9XpHBaYxXh%2fdHTbmchB35SDznXO2g8Vz4D7GTIvY54iMiX_149c95f02a8"
}
}
]
}
}
Все это приводит к трем возможностям:
Ваш поиск анализатор отличается от анализатора индекса. Это почти всегда приведет к неожиданным результатам.
Использование default
должно заставить его использовать для чтения и записи, но вы можете/должны убедиться в том, что на самом деле используется (в отличие от default_index
или default_search
):
curl -XGET /sample/_settings
curl -XGET /sample/_mapping
Если вы видите, что анализаторы сконфигурированы при сопоставлении поля message
, то, вероятно, это должен быть красный флаг.
У вас есть символьный фильтр, возившийся с индексированной строкой (и это, вероятно, не делает то же самое для вашей строки поиска, тем самым указывая на # 1).
- В версии Elasticsearch есть ошибка, которую вы используете (надеюсь, нет, но вы никогда не знаете). Все вышеприведенные тесты были выполнены против версии 1.3.2.