Выделите слова в результатах поиска solr - PullRequest
1 голос
/ 20 марта 2012

У меня есть приложение, которое использует solr в качестве поисковой системы и отображает результаты поиска в сетке данных ASP.Net сайта. Теперь мне нужно выделить «искомое слово» частично или полностью в сетке данных.

Например, скажем, я ищу "Калифорнию". Затем мне нужно выделить Калифорнию как слово, найденное в сетке результатов.

Если у меня есть несколько идентификаторов, таких как 'CA 0012 *', тогда мне нужно выделить CA, California, 0012 * .. и CA 0012.

Я хочу написать эту логику в C # 4.

Заранее спасибо ... :)

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Вам нужен маркер: http://wiki.apache.org/solr/HighlightingParameters

Вот несколько соответствующих выдержек из этого документа

hl

Установите на«true» включить выделенные фрагменты ...

hl.fl

Список полей с разделителями-запятыми или пробелами, для которых нужно сгенерироватьвыделенные фрагменты

hl.simple.pre / hl.simple.post

Текст, который появляется до и после выделенного термина ...

Значения по умолчанию: «» и «»


. Для идентификации CA и California могут потребоваться синонимы Solr или клиентская логика.Вам также нужна привязка .Net для Solr;SolrNet обсуждается здесь часто.

0 голосов
/ 20 марта 2012

Я написал аналогичную логику для своей сетки Telerik Hierarchy в сценарии java.

Сначала я загружаю найденную запись в сетку (на стороне сервера поиска)

Затем я использовал следующую jQuery, чтобы выделитьнайденные строки.

основная логика заключается в динамическом создании SPAN вокруг найденного текста и присвоении ему класса css, который выделяет его, изменяя фон (или любую другую вещь, которую вы хотите).

это jQuery

jQuery.fn.highlight = function(pat)
{
 function innerHighlight(node, pat) 
 {
    var skip = 0;
    if (node.nodeType == 3) 
    {
      var pos = node.data.toUpperCase().indexOf(pat);
      if (pos >= 0) 
      {
        var spannode = document.createElement('span');
        spannode.className = 'highlight';
        var middlebit = node.splitText(pos);
        var endbit = middlebit.splitText(pat.length);
        var middleclone = middlebit.cloneNode(true);
        spannode.appendChild(middleclone);
        middlebit.parentNode.replaceChild(spannode, middlebit);
        skip = 1;
     }
  }
  else if (node.nodeType == 1 && node.childNodes && !/(script|style)    /i.test(node.tagName)) {
   for (var i = 0; i < node.childNodes.length; ++i) {
    i += innerHighlight(node.childNodes[i], pat);
   }
  }
  return skip;
 }
 return this.each(function() 
 {
  innerHighlight(this, pat.toUpperCase());
 });
};

Если вы хотите получить все строки, содержащие найденный текст, вы можете использовать следующий jquery

allrows = $.map("tr.rbi:contains('California')")

Конечно, вам нужно написать некоторую логику, чтобы получитьCA в Калифорнии самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...