【问题标题】:Solr Rest API issue - JavaSolr Rest API 问题 - Java
【发布时间】:2017-08-23 07:40:48
【问题描述】:

我使用 solr 6.5 创建了新的 Rest API。请找到以下步骤 1. 带有查询参数的自定义搜索处理程序

<requestHandler name="/select" class="com.test.solr.TestSearchHandler" default="true">
<lst name="defaults">
  <str name="wt">json</str>
  <str name="indent">true</str>
  <str name="fl">test1,test2</str>
  <str name="df">acSearch</str>
  <str name="sort">score desc</str>
</lst>
<arr name="components">
  <str>query</str>
</arr>

自定义类具有以下功能

   private ModifiableSolrParams createNewSolrParams(SolrQueryRequest request) {
    SolrParams oldParams = request.getParams();
    ModifiableSolrParams newParams = new ModifiableSolrParams(oldParams);
    setUpQueryExpression(newParams, oldParams);
    return newParams;
}


private void setUpQueryExpression(ModifiableSolrParams newParams, SolrParams oldParams) {
    String query = oldParams.get("query");
    newParams.remove("query");
    newParams.set(CommonParams.Q, query);
}

它适用于以下网址,我得到了回应

http://localhost:8330/autocomplete-service/core_autocomplete/select?query=test1:Airport*

但不适用于以下网址

http://localhost:8330/nghp-autocomplete-service/nghp_autocomplete/select?query=Airport*

如何避免查询中的键值对

工作查询=test1:Airport* 需要查询=机场*

正在搜索单词而不是短语。 Example Airport 正在搜索 Airport India 正在运行。

请告诉我如何解决。

【问题讨论】:

  • 您还应该发布自定义搜索处理程序的来源TestSearchHandler
  • 我也建议改进你的问题,因为不清楚你的目标是什么
  • 您的机场数据是什么样的?你试过像Airpor*这样的查询吗?

标签: java solr lucene solrj solr4


【解决方案1】:

在您的请求处理程序下,您将默认查询设置为 acSearch:

&lt;str name="df"&gt;acSearch&lt;/str&gt;

处理程序只会搜索该字段。我将完全摆脱这一行,以便您的请求处理程序具有全文搜索能力。

【讨论】:

  • 删除 acSearch 动态文件后也不起作用。全文搜索没有发生。它搜索单词而不是句子。
  • 所以问题是当您搜索: q=Airport* 时,您只会得到包含 Airport 的文档,而不是包含 Airport 短语的文档? (例如印度机场)
猜你喜欢
  • 1970-01-01
  • 2017-10-17
  • 2019-05-22
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
相关资源
最近更新 更多