Собственный способ добавления похожих результатов в модель через SOLRNET

#solr #solrnet #morelikethis

#solr #solrnet #больше похоже на это

Вопрос:

Я использую SOLRNET и использую более похожие функции SOLR для получения документов, похожих на те, которые возвращаются. Мой код выглядит примерно так (в данном случае я выполняю поиск по идентификатору, поскольку я уже знаю конкретный документ, который я хотел бы загрузить):

 var solr = ServiceLocator.Current.GetInstance<ISolrOperations<MyDocument>>();

var queryOptions = new QueryOptions()
{
    MoreLikeThis = new MoreLikeThisParameters(new[] { "text" })
    {
        MinDocFreq = 1, // minimum document frequency
        MinTermFreq = 1, // minimum term frequency
    },
};

var document = solr.Query(new SolrQuery(string.Concat("id:", id)),queryOptions);
  

Когда я выполняю свой запрос, все работает точно так, как должно, и мой документ извлекается как тип MyDocument . Я могу выполнить итерацию по словарю SimilarResults SOLRNET и увидеть, что похожие документы действительно возвращаются. Мне интересно, существует ли собственный способ сопоставления поля в моем классе MyDocument, чтобы оно было заполнено коллекцией типа MyDocument, представляющей возвращаемые похожие документы.

Если мне нужно перебирать похожие документы один за другим, это нормально, но я предполагаю, что есть простой способ сделать это. Я пробовал очевидные трюки, такие как сопоставление с использованием атрибута в моем классе MyDocument

    [SolrField("moreLikeThis")]
   public IDictionary<string,IList<MyDocument>> SimilarResults { get; set; }
  

Любая помощь будет с благодарностью,

Заранее спасибо

JP

Ответ №1:

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

В любом случае, solr.Запрос возвращает объект ISolrQueryResults, а не просто документ, поэтому у вас будет список похожих документов в document.Похожие результаты, которые вы можете присвоить любому свойству, которое вы хотите.