【问题标题】:Solr Custom Request Handler: creating queries with group clauses?Solr 自定义请求处理程序:使用组子句创建查询?
【发布时间】:2013-04-02 01:03:54
【问题描述】:

我正在编写自己的请求处理程序。 从“q”获得用户输入后

String q = params.get(CommonParams.Q);

我想使用组子句构建一个复杂的查询:

示例:

foo&group.truncate=true&group.ngroups=true&group.field=id&group.sort=date desc&version=2.2&start=0&rows=10&indent=on

我在网上看到他们正在执行以下操作的示例:

查询 query1 = new TermQuery(new Term(q));

那么在这种情况下,q 会是我创建的查询字符串吗?

在我们创建查询之后,我们如何实际执行搜索?

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    【讨论】:

    • 感谢您的回答,但仍然没有回答我的问题。我正在寻找有关如何从用户输入的输入构建复杂查询的示例,例如:用户输入“foo”,我必须添加组子句。
    • @user1998719 很高兴!但请更清楚您的问题,并尝试包含一些额外的信息来支持您的问题。例如,*您使用的是哪个 Solr 版本? * 你是如何使用它的?喜欢使用 SolrJ 或任何其他。 * 问题的标题必须反映您的 Q 的确切线索。 * 您引用的任何受支持的链接。 *您尝试的屏幕截图。 ETC。这样一来,它可能会吸引更多观众的注意力。
    【解决方案2】:

    我没有写RequestHandler的经验,也不知道有多难。

    如果您的要求是为现有查询添加更多过滤器,我认为编写 SearchComponent 很容易。

    您可以编写一个扩展 SearchComponent 的 CustomComponent。在该自定义组件中,您可以重写 prepare 方法,如下所示:

    public void prepare(ResponseBuilder responseBuilder) throws IOException {
     BooleanFilter booleanFilter = new BooleanFilter();
     TermsFilter termFilter = new TermsFilter(new Term("name", value));
     booleanFilter.add(new FilterClause(termFilter, Occur.MUST));
     /*
       Create a filtered Query with the with the filter created and the actual query
      */
     FilteredQuery query = new FilteredQuery(responseBuilder.getQuery(),booleanFilter);
     // Set the new query into the response builder.
     responseBuilder.setQuery(query);
    }
    

    一旦你准备好搜索组件,你就可以在 solrConfig.xml 中创建 searchComponent 如下:

     <searchComponent name="customComponent" class="com.CustomComponent">
    <lst name="parameterName">
        <str name="key">value</str>
    </lst>
      </searchComponent>
    

    然后您可以将其添加为现有请求处理程序中的最后一个组件

    <arr name="last-components">
      <str>customComponent</str>
       <str>spellcheck</str>
     </arr>
    

    【讨论】:

    • 感谢您的回复,但我认为您的解决方案与如何构建自定义过滤器有关。
    • 如果我理解正确,您的用例是将查询修改为更复杂的查询,而不是请求处理程序的工作方式吗?如果是这种情况,自定义组件本身将解决您的问题。您不需要编写自定义请求处理程序。
    • 再次我需要知道如何在自定义请求处理程序中使用 group by 子句构建查询。如果您没有答案,请不要回答任何问题。
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2022-09-28
    • 1970-01-01
    • 2012-04-30
    • 2011-12-19
    • 2014-04-12
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多