2017-08-23 91 views
0

我已经使用solr 6.5创建了新的Rest API。请看以下步骤 1.自定义搜索处理器与查询参数Solr Rest API问题 - Java

<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> 

自定义类有以下impmenetaion

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 *

工作如何避免在查询

键值对工作查询=测试1:机场* 所需查询=机场*

搜索正在发生的词不适用于短语。 示例机场正在搜索印度机场正在运行。

请让我知道如何解决。

+0

您还应该发布您的自定义搜索处理程序'TestSearchHandler'的来源 – freedev

+0

我也建议改善您的问题,因为不清楚您的目标是什么 – freedev

+0

机场数据的外观如何?您是否尝试过像Airpor *这样的查询? –

回答

0

根据您的请求处理程序,你默认查询设置acSearch:

<str name="df">acSearch</str>

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

+0

删除 acSearch动态字段也不起作用。全文搜索没有发生。它搜索单词而不是句子。 – user5773508

+0

所以问题是当你搜索:q =机场*你只能得到有机场的文件,而不是有机场短语的文件? (前机场印度) – Ryan

+0

是的...我没有得到适当的价值 – user5773508