2015-05-12 3 views
0

Я создал индекс в смысле, который я доволен и пытаюсь реализовать набранный запрос в клиенте НЕСТА следующим образом:гнездо упругой search.net не возвращает никаких результатов с помощью любого запроса

  1. var node = new Uri("http://elasticsearch-blablablamrfreeman");

    var settings = new ConnectionSettings(node) 
         .SetTimeout(300000) 
         .SetDefaultIndex("films") 
         .MapDefaultTypeIndices(d => d 
          .Add(typeof(film), "films")) 
          .SetDefaultPropertyNameInferrer(p=>p); 
    
  2. Вводить его (среди поисковика и индексатор) с моей DI:

    builder.Register(c => new ElasticClient(settings)).Named<ElasticClient>("esclient"); 
    
  3. Поиск с использованием любого запроса, такие, как показано ниже:

    var result = _client.Search<film>(s => s .AllIndices() .С (0) .Size (10) .Query (д => д .Term (р => р .Title, query) ));

Индексатор работает нормально, поэтому код не включен в этот список. Я поменял местами любые параметры параметров, поэтому я знаю, что в приведенном выше коде есть избыточность (или, по крайней мере, индекс по умолчанию был бы достаточным).

Результат var не содержит ничего, с большим количеством жира 0 по всем его свойствам, несмотря на то, что у меня есть множество данных по моим показателям (включая индекс «фильмы»).

Я даже попробовал необработанный метод QueryRaw с matchall и nada!

EDIT (Крис Пратт в правильном направлении здесь)

Продолжительность:

var result = _client.Search<film>(s => s 
     .From(0) 
     .Size(10) 
     .QueryRaw(@"{ ""match_all"": {} }")); 

И имея:

 var settings = new ConnectionSettings(node) 
      .SetTimeout(300000) 
      .MapDefaultTypeIndices(d => d 
       .Add(typeof (film), "chosen_index")) 
      .MapDefaultTypeNames(t => t 
       .Add(typeof (film), "en")); 

Возвращает отладочная информация, как:

[Elasticsearch.Net.ElasticsearchResponse<Nest.SearchResponse<film>>] = {StatusCode: 200, 
    Method: POST, 
    Url: http://elasticsearch-blablablamrfreeman/chosen_index/film/_search, 
    Request: { 
    "from": 0, 
    "size": 10, 
    "query": { "match_all": {} } 
}, 
    Response: <Response stream not captured or already read... 

Мой вопрос: : Кажется, я на самом деле запрашивал неправильный URL-адрес в комментарии Криса Пратта, но почему не тип вывода работает для типа, но он для индекса?

/chosen_index/фильм/_search

следует читать

/chosen_index/ен/_search

Если мой логический вывод является правильным.

Должно ли оно ПОЧТОВИТЬСЯ ИЛИ ПОЛУЧИТЬ? Я обычно получаю через API поиска по смыслу. И, наконец, что, если я хочу писать свои запросы против моего родного типа фильма, но в некоторых случаях он переопределяет ES-тип в URL.

Например, если я добавляю другой параметр языка и теперь хочу запросить один и тот же индекс, но как «en», так и «de» ES-типы и т. Д. (Которые являются действительными типами под тем же индексом, что и уже построенный с помощью смысла) ,

Заранее благодарен!

+1

Что мне помогает в этих сценариях - получить фактический запрос NEST, который генерирует и запускает это прямо против вашего индекса. Чтобы получить запрос, вы можете отлаживать и проверять 'ConnectionStatus.Request' на своем объекте результата (он слегка похоронен под' [Nest.SearchResponse <...>] '>' base'). Кроме того, вы можете использовать Glimpse вместе с плагином Elasticsearch, чтобы просмотреть все ваши запросы. Основываясь на сгенерированном запросе и исходных результатах, полученных непосредственно из Elasticsearch, вы обычно можете определить проблему. –

+0

Также, пока вы отлаживаете, проверьте значение 'RequestUrl' (в тех же местах, что и' Request'). Если он запрашивает неверный индекс или что-то еще, вы можете сразу увидеть его. –

+0

@ChrisPratt Отправлено на ваши комментарии, пожалуйста, посмотрите, когда сможете, благодаря кучу! – notsoobvious

ответ

0

Ничего очевидного не выпрыгивает из-за меня, почему это не работает для вас. Тем не менее, я могу дать вам несколько путей, чтобы попытаться решить проблему.

  1. Я не знаком с конкретной DI контейнер, который вы используете, но вполне возможно, что это не является обязательным, что приведет некоторые из ваших вариантов настройки фактически не используемых в экземпляре, который создан. Возможно, это длинный снимок, но я бы рекомендовал копаться и хотя бы проверить, что экземпляр клиента, который вы получаете, настроен так, как он должен быть.

  2. Это своего рода побочный шаг в какой-то мере, но Elasticsearch явно рекомендует вам не обрабатывать локализацию через различные типы. Вы должны либо использовать различные индексы, т.е. chosen_index_en, chosen_index_es и т.д., или использовать multifields:

    "title": { 
        "type": "string", 
        "fields": { 
         "en": { 
          "type": "string", 
          "analyzer": "english" 
         }, 
         "es": { 
          "type": "string", 
          "analyzer": "spanish" 
         } 
        } 
    

    Тогда вы можете найти на такие вещи, как title.en или title.es.

+0

Спасибо за совет Крис, позвольте мне изменить свою структуру отображения и вернуться к вам - надеюсь, с большими пальцами, и многие, многие благодаря вам! – notsoobvious

+0

Привет, Крис! Извините за спам, но, пожалуйста, просмотрите проблему продолжения для отображения здесь: http://stackoverflow.com/questions/30354226/nest-elasticsearch-net-search-query-not-returning-results-part-2 – notsoobvious

0

Как я вижу, вы используете сопоставления по умолчанию для типа пленки. То есть, данные анализируются стандартным анализатором перед индексированием.

В запросе, вы используете запрос Term, который находит документы, которые содержат точный срок (не анализировались), указанный в инвертированном индексе (см here). Так что будьте осторожны, что ваш запрос есть.

Попробуйте использовать запрос соответствия, как показано ниже:

var result = _client.Search<film>(s => s 
    .AllIndices() 
    .From(0) 
    .Size(10) 
    .Query(q => q 
    .Match(p => p.Title, query) 
)); 

запроса теперь анализируют с помощью стандартного анализатора перед применением (см here).

+0

К сожалению, я, возможно, не использовал лучший пример запроса, однако я утверждал, что использовал queryraw и другие. Я чувствую, что проблема не связана с моим фактическим запросом - пожалуйста, взгляните на мои вопросы! – notsoobvious

 Смежные вопросы

  • Нет связанных вопросов^_^