首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sitecore搜索精确匹配问题

Sitecore搜索精确匹配问题
EN

Stack Overflow用户
提问于 2019-09-05 01:42:26
回答 1查看 341关注 0票数 0

索引包含字段:

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

在搜索“文学学士”时,文学士(荣誉)在搜索结果中显示为第一记录。我想把“文学士”作为第一张唱片,因为这是完全匹配的,然后是文学士(荣誉)

这是我的solr查询:

代码语言:javascript
复制
((_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);
EN

回答 1

Stack Overflow用户

发布于 2019-10-08 04:12:02

以下是我的工作:

1.创建一个新的字符串类型的计算字段,并重新生成索引。

2.促进新增加的领域

下面的查询如下所示:

((_latestversion:(真)和includeinsearchresults_t:(真)和includeinsearchresults_t:(真)和includeinsearchresults_t:(真)) ^20或pagetitle_t:(“护理学士”)或description_t:(“护理学士”)或pagecontent_t:(“护理学士”))

谢谢你,萨维塔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57797422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档