繁体   English   中英

Sitecore Solr搜索完全匹配问题

[英]Sitecore Solr Search Exact Match Issue

索引包含以下字段:

  • 文科学士学位
  • 文学学士(荣誉学位)

当搜索“文学学士”时,文学学士(荣誉学位)将显示为搜索结果中的第一条记录。 我希望将“文学学士”作为第一个记录显示,因为这是完全匹配,然后是文学学士(荣誉学位)

这是我的solr查询:

((_latestversion:(True) 
AND includeinsearchresults_t:(true)) 
AND ((name_t:("Bachelor Of arts"))^5 
OR pagetitle_t:("Bachelor Of arts") 
OR description_t:("Bachelor Of arts") 
OR pagecontent_t:("Bachelor Of arts") 
OR ((name_t:(*bachelor*))^2.5 
OR (name_t:(*arts*))^2.5 OR ((pagetitle_t:(*bachelor*))^2 
OR (pagetitle_t:(*arts*))^2) OR ((description_t:(*bachelor*))^1.5 OR (description_t:(*arts*))^1.5) 
OR (pagecontent_t:(*bachelor*) OR pagecontent_t:(*arts*)))))




        var pageTitlePredicatePhrase = PredicateBuilder.True<ContentPageSearchModel>();
        var DescriptionPredicatePhrase = PredicateBuilder.True<ContentPageSearchModel>();
        var pageContentPredicatePhrase = PredicateBuilder.True<ContentPageSearchModel>();
        var NamePredicatePhrase = PredicateBuilder.True<ContentPageSearchModel>();

        var pageTitle1Predicate = PredicateBuilder.True<ContentPageSearchModel>();
        var Description1Predicate = PredicateBuilder.True<ContentPageSearchModel>();
        var pageContent1Predicate = PredicateBuilder.True<ContentPageSearchModel>();
        var NamePredicate1 = PredicateBuilder.True<ContentPageSearchModel>();

        var predicate = PredicateBuilder.True<ContentPageSearchModel>();

        //To check for the entire search phrase

        NamePredicatePhrase = NamePredicatePhrase.Or(item => item.CourseName.Equals(searchPhrase).Boost(5.0f));
        pageTitlePredicatePhrase = pageTitlePredicatePhrase.Or(item => item.PageTitle.Equals(searchPhrase));
        DescriptionPredicatePhrase = DescriptionPredicatePhrase.Or(item => item.CourseDescription.Equals(searchPhrase));
        pageContentPredicatePhrase = pageContentPredicatePhrase.Or(item => item.PageContent.Equals(searchPhrase));


        //For individual value search

        foreach (var word in terms)
        {
            Name1Predicate = Name1Predicate.Or(item => item.CourseName.Contains(word).Boost(2.5f));
            pageTitle1Predicate = pageTitle1Predicate.Or(item => item.PageTitle.Contains(word).Boost(2f));
            Description1Predicate = Description1Predicate.Or(item => item.CourseDescription.Contains(word).Boost(1.5f));
            pageContent1Predicate = pageContent1Predicate.Or(item => item.PageContent.Contains(word).Boost(1f));
        }
        Name1Predicate = Name1Predicate.Or(pageTitle1Predicate).Or(Description1Predicate).Or(pag1Content1Predicate);


        //Final Predicate

        FinalPredicatePhrase = NamePredicatePhrase.Or(pageTitlePredicatePhrase).Or(DescriptionPredicatePhrase).Or(pageContentPredicatePhrase)
                                    .Or(Name1Predicate);

下面为我​​工作:

1.创建一个新的字符串类型的计算字段并重建索引。
2.加强新添加的字段

现在查询如下所示:

(((_latestversion:(True)AND includeinsearchresults_t:(true))AND(( searchname_s :(“护理学士”))^ 20 OR pagetitle_t :(“护理学士”)OR description_t :(“护理学士”)OR pagecontent_t :(“护理学士”)))

谢谢,萨维莎

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM