Sitecore solr поиск по символам вместо слов - PullRequest
0 голосов
/ 28 августа 2018

Я реализовал поиск с помощью вычисляемого поля для содержимого страницы. но проблема заключается в том, что поиск выполняется по словам, а не по символам, например, если я ищу «Это мой пост», он возвращает результаты, но при поиске «его - мой пост» он не соответствует записям. Я предполагаю, потому что он сохранил их как слова и соответствия, поэтому я пробовал и Tokenzied и UnTokenized, но проблема не устранена. Любое краткое руководство?

       </fieldNames>
     </fieldMap>
     <documentOptions type="Sitecore.ContentSearch.SolrProvider.SolrDocumentBuilderOptions, Sitecore.ContentSearch.SolrProvider">
       <fields hint="raw:AddComputedIndexField">
         <field fieldName="renderings_content" returnType="text" >Sitecore.Feature.Search.Infrastructure.Fields.RenderingsContentComputedField, Sitecore.Feature.Search</field>
       </fields>
     </documentOptions>

   </defaultSolrIndexConfiguration>

Мой запрос Solr:

? Q = ((_pullpath: (/ sitecore / content / marko *) И (((-base_template_ids_sm: (ae3e2aaacb77453fad3eb15f9aa7a73b) : ) ИЛИ (base_template_ids_sm2aba_3_155) )) И (base_template_ids_sm: (79b74cfd7d3a4aa4b238f754a6ca52ef) ИЛИ base_template_ids_sm: (b815c3ed17d84e78815e2b34e52fef79) ИЛИ base_template_ids_sm: (ea18699f5c764f69ba11a1336b83016e) ИЛИ base_template_ids_sm: (9f08fd0633ed467ba5e6b6a7f48c3a7a) ИЛИ base_template_ids_sm: (cea1d388d04f4b46a9bcd5c251064186)))) И (title_t :( "* * дубаи LSE") ИЛИ search_description_t : ( lse dubai ) ИЛИ renderings_content_t :( "* lse dubai *") ИЛИ (title_t :( "* lse dubai *") ИЛИ description_t :( "* * lse dubai *") ИЛИ renderings_content_t :( " * lse dubai * ")) ИЛИ (title_t :(" * lse dubai * ") ИЛИ search_description_t: ( lse dubai ) ИЛИ renderings_content_t :(" * lse dubai * ")) ИЛИ (search_description_t: ( lse dubai ) ИЛИ event_title_t: ( lse Дубай ) ИЛИ renderings_content_t :( "* lse Дубай *")) ИЛИ ( title_t :( "* lse dubai *") ИЛИ search_description_t: (* lse dubai ) ИЛИ renderings_content_t :( "* lse dubai *")))) & start = 0 & row = 2 & fl = *, Score & fq = (_ latestversion: (Верно) И _язык: (en)) & fq = _indexname: (marko_web_index)

1 Ответ

0 голосов
/ 29 августа 2018

Что вы ищете, так это поиск по предложениям. И да, это возможно в Sitecore!

Прежде всего, вам необходимо настроить Предложение компонента на Solr. Если вы перейдете по ссылке, вы увидите, что есть довольно много вариантов, которые вы можете настроить. Поиск в Улучшение опыта поиска с Solr Suggester может быть полезным для вас.

Тогда вам просто нужно использовать, если:

SitecoreIndexableItem rootItem = Context.Database.GetRootItem();            
ISearchIndex index = ContentSearchManager.GetIndex(rootItem); //of course you can resolve index in different way or just pick one you are interested in
using (var context = index.CreateSearchContext())
{
    SolrSuggestQuery query = model.Term;
    SolrSuggestHandlerQueryResults result;
    SuggestHandlerQueryOptions options = new SuggestHandlerQueryOptions
    {
        Parameters = new SuggestParameters
        {
            Count = 5
        }
    };

    using (queryTimer = new Timer())
    {
        result = context.Suggest(query, options);
    }

    return result.Suggestions["NAME_OF_YOUR_SUGGESTER"].Suggestions.Select(a => new Suggestion { Term = a.Term, Payload = a.Payload});
}

Suggestion класс, используемый здесь new Suggestion { Term = a.Term, Payload = a.Payload} - это пользовательский класс (не предоставляется Sitecore). Вы можете использовать свой собственный.

Важно! Поиск предложений возможен только в Sitecore 9 (и выше) и при использовании Solr.

...