2

我正在编写自己的请求处理程序。从“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,将是我创建的查询字符串吗?

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

4

2 回答 2

1

我没有深入了解这些链接,但请检查它是否为您的 Q 提供了任何线索。

于 2013-03-29T04:53:49.203 回答
0

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

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

您可以编写一个 CustomComponent 扩展 SearchComponent。在该自定义组件中,您可以覆盖 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>
于 2013-03-28T21:42:22.377 回答