Как искать начало и конец предложения в asticsearch
Я пытался найти следующие два случая
Случай 1:
Я хочу найти имя, которое начинается с определенного слова. Например:
имя: тестовое имя
имя: имя тест
имя: имя теста
если я ищу "тест", то он должен вернуть мне только "имя теста" и "тест имени теста".
случай 2:
Я хочу найти имя, которое заканчивается определенным словом. Например:
имя: тестовое имя
имя: имя тест
имя: имя теста
если я ищу "тест", то он должен вернуть мне только "имя теста" и "тест имени теста".
Может ли кто-нибудь помочь мне найти запросы в Java API-интерфейс asticsearch или любым другим способом для его поиска.
Эластичный поиск версии 6.2.1
Любая помощь очень ценится.
2 ответа
Для случая 1 вы можете использовать CompletionSuggester
, Вам нужно специальное отображение для поля, чтобы использовать подсказку для завершения, как это:
"mappings": {
"some_index": {
"properties": {
"title": {
"type": "completion"
}
}
}}
В коде вы должны определить подсказку, как это (term
ваше поисковое слово, "начинается" - произвольное имя):
CompletionSuggestionBuilder completionBuilder = SuggestBuilders.completionSuggestion("title").prefix(term);
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion("starts", completionBuilder);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.suggest(suggestBuilder);
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.source(searchSourceBuilder);
После того, как вы получите ответ на поиск, обработайте его, чтобы получить предложения:
Suggest suggest = searchResponse.getSuggest();
if (suggest == null) {
return Collections.emptyList();
} else {
CompletionSuggestion suggestion = suggest.getSuggestion("starts");
return suggestion
.getOptions()
.stream()
.map(CompletionSuggestion.Entry.Option::getText)
.map(Text::toString)
.collect(Collectors.toList());
}
Вам нужно использовать отображение с search_analyzer
свойство (analyzer_startswith или analyzer_endswith)
"mappings": {
"some_index": {
"properties": {
"title": {
"search_analyzer": "analyzer_startswith",
"index_analyzer": "analyzer_startswith",
"type": "string"
}
}
}
}
что-то вроде