Эластичный поиск гнездо поисковый запрос
Я застреваю, получая при реализации поиска с помощью упругого поиска гнезда. Я должен реализовать как запрос с упругим поиском. например выберите * из таблицы, где имя пользователя, например, '%abc xyz%'. Как вы можете видеть в приведенном выше sql-запросе, я применил запрос типа "строка" abc и еще одну строку "xyz". Точно так же я хочу этот запрос в упругом поиске. Может ли кто-нибудь помочь мне реализовать такой запрос в гнезде упругого поиска?
Ниже приведен запрос
Client.Search<Video>(s => s
.Query(q => q
.Match(m => m
.OnField("video_parent")
.Query("0")
) && q
.Match(m => m
.OnField("video_status")
.Query(objVideosFilterCriteria.VideoStatus.ToString())
) && q
.MatchPhrase(ff=>ff
.OnField("video_title")
.Query(objVideosFilterCriteria.SearchString)
) && q
.Range(r => r
.OnField(f => f.video_date)
.GreaterOrEquals(fromDate)
.LowerOrEquals(toDate)
)
)
.From(objVideosFilterCriteria.PageIndex)
.Size(objVideosFilterCriteria.PageSize)
);
Выше запрос, который я использую. В этом запросе я использую
q.MatchPhrase(ff=>ff
.OnField("video_title")
.Query(objVideosFilterCriteria.SearchString)
)
для одинакового запроса. Но это не похоже на работу. Я использую данные ниже и хочу отфильтровать данные из списка ниже.
"hits" : [
{
"_source" : {
"video_id" : 265006,
"video_title" : "nunchuk rockin roller II"
}
},
{
"_source" : {
"video_id" : 265013,
"video_title" : "?Shaggy?????Locks???7??????Alberto E. Interview {407} 967 ~ 8596?"
}
},
{
"_source" : {
"video_id" : 265014,
"video_title" : "Shakin' Stevens - Kalundborg Rocker"
}
},
{
"_source" : {
"video_id" : 265019,
"video_title" : "?Shaggy?????Locks? = 7??????Greg M. Interview {407} 967 ~ 8596?"
}
},
{
"_source" : {
"video_id" : 265023,
"video_title" : "?Shaggy?????Locks? = 7??????Jason M. Interview {407} 967 ~ 8596?"
}
}
]
Например, я хотел бы выполнить поиск по ключевому слову "kin rol" в поле "video_title", поэтому с вышеуказанными данными он должен получить одну запись, которая существует на первой позиции в списке выше, но в моем текущем запросе, который я получаю. ничего такого.
1 ответ
Вы должны использовать подстановочные знаки, чтобы получить данные, как вы собираетесь.
string searchTerm = "*kin rol*";
.Query(q => q.Wildcard(wc => wc.Field(f => f.video_title).Value(term)));
Имейте в виду, что подстановочные запросы могут выполняться медленно, поэтому не рекомендуется запускать их с подстановочными знаками *.
Также вам нужно добавить анализаторы, если вы хотите искать с пробелом. Пожалуйста, обратитесь по ссылкам ниже