Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在solr中创建自定义搜索组件_Solr - Fatal编程技术网

如何在solr中创建自定义搜索组件

如何在solr中创建自定义搜索组件,solr,Solr,我正在尝试为solr创建一个自定义搜索组件来处理一个特殊请求。在这种情况下,我想搜索并检查结果编号是否为空。如果它是空的,我将尝试更新搜索条件并再次尝试搜索 我需要这样做,因为目前我必须多次查询并检查结果编号,如果结果为空,则再次查询。要得到最终结果需要花费大量的请求 所以我想在solr服务器上完成,然后在客户端发送一个请求并得到最终结果 我必须遵循这一点。然后我检查了solr日志,但我没有看到“Hello world”被打印出来 这是我的定制课程 public class CustomQuer

我正在尝试为solr创建一个自定义搜索组件来处理一个特殊请求。在这种情况下,我想搜索并检查结果编号是否为空。如果它是空的,我将尝试更新搜索条件并再次尝试搜索

我需要这样做,因为目前我必须多次查询并检查结果编号,如果结果为空,则再次查询。要得到最终结果需要花费大量的请求

所以我想在solr服务器上完成,然后在客户端发送一个请求并得到最终结果

我必须遵循这一点。然后我检查了solr日志,但我没有看到“Hello world”被打印出来

这是我的定制课程

public class CustomQueryComponent extends SearchComponent {
    private static final Logger LOG = Logger.getLogger(CustomQueryComponent.class);

    @Override
    public void prepare(ResponseBuilder responseBuilder) throws IOException {
        LOG.info("Hello world");
    }

    @Override
    public void process(ResponseBuilder responseBuilder) throws IOException {
        LOG.info("Hello world");
    }

    @Override
    public String getDescription() {
        return "CustomQueryComponent";
    }

    @Override
    public String getSource() {
        return null;
    }
}
和my solrconfig.xml:

//...
    <searchComponent name="customQueryComponentDemo" class="com.company.CustomQueryComponent">
    </searchComponent>

    <requestHandler name="/search" class="solr.SearchHandler">
        <lst name="defaults">
            <str name="echoParams">explicit</str>
            <int name="rows">10</int>
            <bool name="preferLocalShards">false</bool>
        </lst>
        <arr name="first-components">
            <str>customQueryComponentDemo</str>
        </arr>
    </requestHandler>
//...
有人知道为什么吗? 我期待着你的回答。谢谢!
很抱歉英语不好。

我终于发现了问题所在。 在solrconfig.xml中,我使用自定义搜索组件定义了
/search
请求处理程序。 但是当我测试它时,我使用了
/select

有关详细信息

您可以通过
grep
后几行检查控制台输出是否成功加载jar文件,如下所示:

INFO  org.apache.solr.core.SolrResourceLoader  û Adding 'file:/C:/Users/../custom-search-component.jar' to classloader
然后转到Solr管理页面>集合名称>插件/统计信息>查询处理程序>您的自定义处理程序>描述>使用组件搜索。如果在此列表中看到自定义组件,则该操作已完成。

感谢@matslindh的建议。

您确定日志记录设置中包含从您的类名返回标识符的消息吗?附加一个调试器并在调试模式下运行所有内容,尝试使用一些println(应该在日志IIRC中结束),并验证启动Solr时是否加载了jar文件(应该在服务器启动日志中显示)。
INFO  org.apache.solr.core.SolrResourceLoader  û Adding 'file:/C:/Users/../custom-search-component.jar' to classloader