ElasticsearchRepository запрос findBy возвращает ноль, если в параметре есть специальные символы - PullRequest
1 голос
/ 25 марта 2020

У меня есть коллекция ES со следующей схемой do c.

public class Address {

    @Id
    private String id;
    private String name;
    private String type;
    private String city;
}

Мой репозиторий выглядит следующим образом:

public interface NetworkElementsESRepository extends ElasticsearchRepository<Address, String> {
     Address findByNameAndCity(String name, String city);
}

Когда я запускаю запрос addressRepo.findByNameAndCity (Name, City) , он возвращает ноль, когда Параметр name имеет специальный символ (ы) (например, B00 / A3K / 24), но возвращает результат в порядке, когда в Name нет специальных символов.

Я просмотрел всю документацию по использованию ElasticSearch и ES с Spring Boot, но все тщетно. Я не получаю точную ошибку, почему запрос не выполняется.

1 Ответ

0 голосов
/ 25 марта 2020

Это происходит потому, что вы можете использовать поле Elasticsearch text для своего поля name, которое использует стандартный анализатор и удаляет специальный символ, такой как / в вашем случае, как показано на ниже образца. и затем с помощью запроса [term][1] или другого запроса, который не удаляет символ / в вашем запросе.

Анализ API

{
    "text": "B00/A3K/24",
    "analyzer" : "standard"
}

Сгенерированные токены

{
    "tokens": [
        {
            "token": "b00",
            "start_offset": 0,
            "end_offset": 3,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "a3k",
            "start_offset": 4,
            "end_offset": 7,
            "type": "<ALPHANUM>",
            "position": 1
        },
        {
            "token": "24",
            "start_offset": 8,
            "end_offset": 10,
            "type": "<NUM>",
            "position": 2
        }
    ]
}

Приведенное выше основано на предоставленной вами информации, и, если вы сможете предоставить отображение индекса и поисковый запрос в формате JSON, я могу подтвердить это или сообщить вам точную причину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...