2016-09-28 3 views
0

У меня есть страница, похожая на словарь. Я использовал Umbraco для генерации слов на странице, и каждое слово имеет описание. Это слова питания, так что это похоже на «соль», «витамин B12» и т. Д. Теперь мне нужно создать панель поиска, которая будет искать эти слова и вернет результаты, и мне нужно, чтобы она была нечеткой. Мне не нужно использовать Umbraco за отзыв, но я делаю проект до сих пор с помощью MVC и бритвы. Я не знаю, как заставить его искать страницу.Поиск HTML-дерева DOM с формой поиска

<div class="row"> 

      @foreach (var item in Model.Content.Descendants("lekseisDiatrofikouLeksikou")) 
      { 





       <div class="col-sm-3 styled"> 
        <button data-id="@id" type="button" class="btn"> 
         @(item.GetPropertyValue<string>("leksi")) 
        </button> 
        <div id="@("button-wrapper"+id)" class="col-xs-12 styled2 text-center nopadding"> 
         @Html.Raw(item.GetPropertyValue<string>("perigrafiLeksis")) 
        </div> 
       </div> 
       id++; 
      } 

     </div> 

Это цикл, который я использую для создания слов в словаре. Это создает бутстрап col-sm-3 для каждого слова. Я буквально понятия не имею, как искать эти слова. Должен ли я искать дерево DOM в HTML?

ответ

2

Нет! Определенно :) В Umbraco у вас есть индексы Examine/Lucene, чтобы вы могли быстро и легко найти функцию поиска. Это сделано для упрощения поиска. Вы можете выполнить эту операцию внутри потомков страниц, но в этом случае проверка будет намного лучше.

Ознакомьтесь с инструкциями по установке и деталям здесь: https://our.umbraco.org/documentation/reference/searching/examine/, а затем перейдите на страницу https://our.umbraco.org/documentation/reference/searching/examine/overview-explanation, чтобы узнать, как использовать Fluent API и построить запрос, с помощью которого вы сможете искать только интересующие вас узлы.

Это может выглядеть следующим образом:

var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); 
var searchCriteria = ExamineManager.Instance.CreateSearchCriteria(); 

var valuesToSearch = new string[] { "salt", "vitamin" }; 

searchCriteria.NodeTypeAlias("AliasOfYourDictionaryItemDocumentType"); 
searchCriteria.GroupedOr(new List<string>() { "propertyAliasInWhichWeWantToSearch" }, valuesToSearch); 

var results = umbracoHelper.TypedSearch(searchCriteria); 

И вы будете иметь список элементов, возвращенных из поиска индекса. Он непроверен, но, надеюсь, будет нацелен на вас в правильном направлении. Счастливое кодирование!

+0

Спасибо, но, к сожалению, я не могу добавить материал в индекс каждый раз, когда клиент добавляет другое слово. Может быть, я не правильно ее формулировал, но у меня есть доктрисы для каждого слова без шаблона. Внутренние свойства генерируются автоматически, когда клиент добавляет новый тип doctype. Я не должен снова вмешиваться в сайт, как только это будет сделано, а значит, я не смогу обновить код. Это нужно сделать само по себе. Я ценю ваш комментарий. Я действительно так делаю. – Jabberwocky

+0

Это автоматически добавляется к стандартным (внутренним, внешним) индексам, вам не нужно ничего делать. Таким образом, если какой-либо редактор будет размещать новый контент в разделе «Содержимое», элементы в индексе будут автоматически обновляться. Вы можете проверить запросы и проверить, что находится в индексе в разделе «Разработчик» и вкладке «Изучить управление». –

+0

Насколько я знаю, даже индексы по умолчанию должны обновляться вручную на Examine (я использовал его до того, почему у меня есть это понятие в моей голове). Вы имеете в виду, что я должен индексировать doctype, и после этого он будет искать самостоятельно? – Jabberwocky