Во-первых, вам нужно понять, как работает Elasticsearch и почему он дает результат, а не дает.
ES работает с соответствием токенов. Документы, которые вы индексируете в ES, проходят процесс анализа и создают и сохраняют токены, сгенерированные из этого процесса, в инвертированный индекс, который используется для поиска.
Теперь, когда вы делаете запрос, этот запрос также генерирует поисковые токены, они могут быть такими, как в поисковом запросе в случае запроса термина или токенами на основе анализатора, определенного в поле поиска в случае запроса на совпадение. Следовательно, очень важно понимать внутренности вашего поискового запроса.
Кроме того, очень важно понимать отображение вашего индекса, ES использует стандартный анализатор по умолчанию для текстовых полей.
Вы можете использовать API Explain , чтобы понять внутреннюю часть запроса, например, какие поисковые токены генерируются вашим поисковым запросом, как документы соответствуют ему и на каком основании рассчитывается оценка.
В вашем случае я создал поле имени в виде текста, в котором используется анализатор объединенных слов, описанный в Игнорировать пробелы в Elasticsearch , и я смог получить документ, состоящий из sample name
, при поиске samplen
.
Дайте нам знать, если вы тоже хотите добиться того же и решит ли это вашу проблему.