实现k意味着在solr中进行聚类

时间:2017-11-29 12:58:14

标签: solr lucene

如何在solr 6.5中实现k表示聚类?

要求: -

1)我想根据分数

在查询时对文档进行聚类

2)我编写了自己的处理程序,我想在该处理程序中添加聚类函数,使其不符合文档的顺序

我曾尝试编写群集搜索组件,如下所示: -

<searchComponent name="clustering" enable="${solr.clustering.enabled:true}" class="solr.clustering.ClusteringComponent">
                <lst name="engine">
                        <str name="name">kmeans</str>
                        <str name="carrot.algorithm">org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm</str>
                        <str name="BisectingKMeansClusteringAlgorithm.clusterCount">4</str>
                        <str name="documents">100</str>
                        <str name="BisectingKMeansClusteringAlgorithm.maxIterations">4</str>
                </lst>
        </searchComponent>

我的请求处理程序如下:

   <requestHandler name="abc" class="solr.SearchHandler">
        <lst name="invariants">
            <str name="defType">synonym_edismax</str>
            <str name="synonyms">true</str>
            <str name="indent">on</str>
        </lst>
        <lst name="appends">
            <str name="fq">search_term</str>
        </lst>
        <lst name="defaults">
            <str name="echoParams">none</str>
            <str name="wt">json</str>
            <str name="timeAllowed">15000</str>
            <str name="qf">Field1</str>
            <str name="qf">Field2^0.5</str>
            <str name="pf">Field3</str>
            <float name="tie">0.2</float>
            <str name="fl">Field5,Field6</str>
            <str name="facet">false</str>
            <str name="mm">2&lt;-1 4&lt;70%</str>
            <!-- spellcheck -->
            <str name="spellcheck.dictionary">default</str>
            <str name="spellcheck">on</str>
            <str name="spellcheck.extendedResults">true</str>
            <str name="spellcheck.count">1</str>
            <str name="spellcheck.onlyMorePopular">true</str>
            <str name="spellcheck.collate">true</str>
        </lst>
        <arr name="last-components">
            <str>spellcheck</str>
        </arr>
    </requestHandler>

如何在此请求处理程序中添加聚类,以使我的聚类数为4,迭代次数为4

还有什么区别

carrot.url
carrot.snippet
carrot.title

我阅读了文档定义,但我无法理解它。

1 个答案:

答案 0 :(得分:1)

将集群组件添加到请求处理程序中:

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

然后:

    <str name="carrot.url">id</str> -> unique key of your document
    This is the unique identifier for your document.
    <str name="carrot.title">doctitle</str> -> the title(s)/label(s) for your document
    This is the field or list of fields, which are short and tend to be more important to group your documents together
    <str name="carrot.snippet">content</str> -> the content/text/body of your document

来自维基:

<强> carrot.title

应映射到逻辑文档标题的字段(以逗号或空格分隔的字段列表)。与内容(片段)相比,聚类算法通常对标题字段的内容给予更多权重。为获得最佳效果,该字段应包含简洁,无噪音的内容。如果数据中没有明确的标题,则可以将此参数留空。

<强> carrot.snippet

应映射到逻辑文档主要内容的字段(以逗号或空格分隔的字段列表)。如果此映射指向非常大的内容字段,则群集的性能可能会显着下降。另一种方法是使用查询上下文片段进行聚类而不是完整的字段内容。有关详细信息,请参阅carrot.produceSummary参数的说明。

<强> carrot.url

应映射到逻辑文档的内容URL的字段。如果不需要,请留空。