Эластичный поиск гнездо поисковый запрос

Я застреваю, получая при реализации поиска с помощью упругого поиска гнезда. Я должен реализовать как запрос с упругим поиском. например выберите * из таблицы, где имя пользователя, например, '%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.Vide‌​oStatus.ToString())
        ) && q
        .MatchPhrase(ff=>ff
            .OnField("video_title")
            .Query(objVideosF‌​ilterCriteria.Search‌​String)
        ) && q
        .Range(r => r
            .OnField(f => f.video_date)
            .GreaterOrEquals(fromDate)
            .LowerOrEquals(toDate‌​)
        ) 
    )
    .From(objVideosFilterCriteria.PageIndex)
    .Size(objVideosFilt‌​erCriteria.PageSize)
‌​); 

Выше запрос, который я использую. В этом запросе я использую

q.MatchPhrase(ff=>ff
    .OnField("video_title")
    .Query(objVideosF‌​‌​ilterCriteria.Sear‌​ch‌​String)
) 

для одинакового запроса. Но это не похоже на работу. Я использую данные ниже и хочу отфильтровать данные из списка ниже.

"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)));

Имейте в виду, что подстановочные запросы могут выполняться медленно, поэтому не рекомендуется запускать их с подстановочными знаками *.

Также вам нужно добавить анализаторы, если вы хотите искать с пробелом. Пожалуйста, обратитесь по ссылкам ниже

  1. Подстановочный запрос Elasticsearch Nest с пробелами
  2. https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html
Другие вопросы по тегам