首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FilderQuery与Solarium的析取

FilderQuery与Solarium的析取
EN

Stack Overflow用户
提问于 2017-03-27 16:51:15
回答 1查看 133关注 0票数 0

我最近在使用PHP/Solarium时偶然发现了Solr的一个奇怪的行为。

我为一个filterQuery构造了一个查询,并像这样构建它:

代码语言:javascript
复制
$select = array(
        'query'     => $this->getSearchTermForQuery(),
        'fields'    => '*,score',
        'start'     => $this->numResultsPerPage * ($this->currentPage-1),
        'rows'      => $this->numResultsPerPage,
        'component' => array(
            'edismax' => array(
                'queryfields' => implode(' ', array(
                    $this->queryFields['firstArray'],
                    $this->queryFields['secondArray'],
                    $this->queryFields['thirdArray'],
                )),
            ),
        ),
        'sort' => $this->orderBy,
    );

方法"getSearchTermForQuery()“构建发送到Solr服务器的字符串。它完美地处理了单个单词或组合,如“夏天和冬天”。现在我想实现一个析取,如果它是用户输入中显式需要的。所以会有一个类似于“夏天或冬天”的字符串。这个也很好用。现在如果我得到像“(夏季和冬季)或冬季”这样的东西,事情就变得复杂了。在这种情况下,我得到了一个非常奇怪的结果。

再次编辑Hello,我的旧示例已经不再有意义了,所以我删除了它们。我目前所处的状态最好用以下几点来解释。

我想我现在离问题更近了。在当前状态下,我使用的是edismax queryparser。我的查询如下所示:

代码语言:javascript
复制
#queryString: "((+"Test"+"Sommer")(+"Test"))"

使用少量的查询字段,一切似乎都能正常工作,解析后的查询如下所示:

代码语言:javascript
复制
#parsedQuery: "(+((+DisjunctionMaxQuery((content:test | daad_imperia_title:test)) +DisjunctionMaxQuery((content:somm | daad_imperia_title:somm))) (+DisjunctionMaxQuery((content:test | daad_imperia_title:test)))))/no_coord"

这会产生预期的结果/行为。但是,如果我使用所有的查询字段,我希望解析后的查询的结构发生变化。它看起来是这样的:

代码语言:javascript
复制
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* #parsedQuery: "(+DisjunctionMaxQuery(((daad_stipdb_title:test daad_stipdb_title:summ daad_stipdb_title:test) | (daad_stipdb_furtherInformation:test daad_stipdb_furtherInformation:summ daad_stipdb_furtherInformation:test) | (daad_imperia_documentTitle:test daad_imperia_documentTitle:summ daad_imperia_documentTitle:test) | (daad_iO_hsportrait:test daad_iO_hsportrait:summer daad_iO_hsportrait:test) | (daad_imperia_forename:test daad_imperia_forename:summer daad_imperia_forename:test) | (daad_imperia_subtitle:test daad_imperia_subtitle:summer daad_imperia_subtitle:test) | (daad_stipdb_targetGroup:test daad_stipdb_targetGroup:summ daad_stipdb_targetGroup:test) | (daad_stipdb_moreInformation:test daad_stipdb_moreInformation:summ daad_stipdb_moreInformation:test) | (daad_stipdb_applicationLocation:test daad_stipdb_applicationLocation:summ daad_stipdb_applicationLocation:test) | (daad_iO_prepForSubject:test daad_iO_prepForSubject:summer daad_iO_prepForSubject:test) | (daad_imperia_multiselectLand:test daad_imperia_multiselectLand:summ daad_imperia_multiselectLand:test) | (daad_iO_cooperation:test daad_iO_cooperation:summer daad_iO_cooperation:test) | (daad_iO_addInformation:test daad_iO_addInformation:summer daad_iO_addInformation:test) | (daad_imperia_pmDocumentLabel01:test daad_imperia_pmDocumentLabel01:summ daad_imperia_pmDocumentLabel01:test) | (daad_stipdb_requirements:test daad_stipdb_requirements:summ daad_stipdb_requirements:test) | (daad_iO_digiCourseDescription:test daad_iO_digiCourseDescription:summer daad_iO_digiCourseDescription:test) | (daad_iO_institution:test daad_iO_institution:summer daad_iO_institution:test) | (daad_imperia_metaKeywords:test daad_imperia_metaKeywords:summ daad_imperia_metaKeywords:test) | (daad_imperia_multiselectTheme:test daad_imperia_multiselectTheme:summ daad_imperia_multiselectTheme:test) | (daad_stipdb_languageKnowledge:test daad_stipdb_languageKnowledge:summ daad_stipdb_languageKnowledge:test) | (daad_stipdb_subjects:test daad_stipdb_subjects:summ daad_stipdb_subjects:test) | (daad_stipdb_programName:test daad_stipdb_programName:summ daad_stipdb_programName:test) | (daad_imperia_metaDescription:test daad_imperia_metaDescription:summ daad_imperia_metaDescription:test) | (daad_imperia_intro:test daad_imperia_intro:summ daad_imperia_intro:test) | (url:test url:summer url:test) | (daad_iO_location:test daad_iO_location:summer daad_iO_location:test) | (daad_iO_digiCourseModules:test daad_iO_digiCourseModules:summer daad_iO_digiCourseModules:test) | (content:test content:summ content:test) | (daad_iO_subject:test daad_iO_subject:summer daad_iO_subject:test) | (daad_stipdb_teaser:test daad_stipdb_teaser:summ daad_stipdb_teaser:test) | (daad_imperia_pmLinkLabel01:test daad_imperia_pmLinkLabel01:summ daad_imperia_pmLinkLabel01:test) | (daad_iO_courseName:test daad_iO_courseName:summer daad_iO_courseName:test) | (daad_iO_keywords:test daad_iO_keywords:summer daad_iO_keywords:test) | (daad_imperia_linguas:test daad_imperia_linguas:summ daad_imperia_linguas:test) | (daad_stipdb_value:test daad_stipdb_value:summ daad_stipdb_value:test) | (daad_imperia_dateline:test daad_imperia_dateline:summ daad_imperia_dateline:test) | (daad_iO_organisation:test daad_iO_organisation:summer daad_iO_organisation:test) | (daad_imperia_profession:test daad_imperia_profession:summer daad_imperia_profession:test) | (daad_iO_fos:test daad_iO_fos:summer daad_iO_fos:test) | (daad_iO_internship:test daad_iO_internship:summer daad_iO_internship:test) | (daad_stipdb_efford:test daad_stipdb_efford:summ daad_stipdb_efford:test) | (daad_iO_degree:test daad_iO_degree:summer daad_iO_degree:test) | (daad_iO_studyAbroad:test daad_iO_studyAbroad:summer daad_iO_studyAbroad:test) | (daad_imperia_lastname:test daad_imperia_lastname:summer daad_imperia_lastname:test) | (daad_iO_cityPortrait:test daad_iO_cityPortrait:summer daad_iO_cityPortrait:test) | (daad_imperia_contact:test daad_imperia_contact:summ daad_imperia_contact:test) | (daad_stipdb_subjectGroups:test daad_stipdb_subjectGroups:summ daad_stipdb_subjectGroups:test) | (daad_imperia_subhead:test daad_imperia_subhead:summ daad_imperia_subhead:test) | (daad_imperia_professionShort:test daad_imperia_professionShort:summer daad_imperia_professionShort:test) | (daad_stipdb_targets:test daad_stipdb_targets:summ daad_stipdb_targets:test) | (daad_stipdb_status:test daad_stipdb_status:summ daad_stipdb_status:test) | (daad_stipdb_progType:test daad_stipdb_progType:summ daad_stipdb_progType:test) | (daad_stipdb_longNames:test daad_stipdb_longNames:summ daad_stipdb_longNames:test) | (daad_iO_typeOfIntitution:test daad_iO_typeOfIntitution:summer daad_iO_typeOfIntitution:test) | (daad_imperia_title:test daad_imperia_title:summ daad_imperia_title:test) | (daad_stipdb_length:test daad_stipdb_length:summ daad_stipdb_length:test) | (daad_stipdb_targetCountries:test daad_stipdb_targetCountries:summ daad_stipdb_targetCountries:test) | (daad_iO_leisureProgramme:test daad_iO_leisureProgramme:summer daad_iO_leisureProgramme:test) | (daad_stipdb_originCountries:test daad_stipdb_originCountries:summ daad_stipdb_originCountries:test) | (daad_iO_courseContent:test daad_iO_courseContent:summer daad_iO_courseContent:test) | (daad_stipdb_contacts:test daad_stipdb_contacts:summ daad_stipdb_contacts:test))))/no_coord"
*/

它只创建一个包含查询中所有单词的大dismaxQuery。有人知道吗?我想我快疯了。

我希望有人能在这方面给我一个提示。

致以最好的问候,罗纳德

EN

回答 1

Stack Overflow用户

发布于 2017-03-27 21:45:49

免责声明:我是Solr Query Debugger谷歌浏览器插件的作者。

这主要取决于集合是如何配置的,以及您使用的是哪种查询解析器(我假设是edismax)。

如果您可以跟踪Solr实例的日志文件,这将有助于您提交真正的查询。

这样,您就可以在浏览器中使用该查询,然后对其进行调试。

实际上,我建议使用调试器来查看正在执行的是什么,并解释为什么您的查询具有如此奇怪的行为。

还有其他调试器:

  • splainer.io - by OpenSource Connections team
  • Solr Explain

因此,只需在浏览器中执行Solr查询,如果它可以工作,则启动您喜欢的Solr调试器。

在我的插件页面中,你会看到DebugEcho标签页,它们解释了Solr执行了什么。在Explain选项卡中,您将看到以树形式组织的乐谱解释。

希望这能有所帮助。

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

https://stackoverflow.com/questions/43041861

复制
相关文章

相似问题

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