在Solr中获得有效载荷分数

时间:2017-04-26 08:05:58

标签: java solr lucene payload

我是Solr的新手,我试图检索这样的文件,按有效载荷排序。

{ "id": "1", "tags": ["Cat|0.8", "Dog|0.2"] },
{ "id": "2", "tags": ["Cat|0.4", "Dog|0.6"] }

我尝试使用有效负载来增强每个标记,但所有信息我发现它有点旧。 This是我发现的最新出版物。

但我发现this, too并且我不知道是否有比第一种方法更新的东西。使用第二个链接,我想我可以添加到schema.xml

 <fieldType name="tags" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
     <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float" delimiter="|"/>
   </analyzer>
 </fieldType>

有效载荷将被识别。但我不知道如何检查,我只看到搜索&#34; Dog&#34;结果未按有效负载排序。

{
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "q":"Dog",
      "indent":"on",
      "wt":"json",
      "_":"1493191003038"}},
  "response":{"numFound":2,"start":0,"docs":[
      {
        "id":"1",
        "tags":["Cat|0.8",
          "Dog|0.2"],
        "_version_":1565724328306147328},
      {
        "id":"2",
        "tags":["Cat|0.4",
          "Dog|0.6"],
        "_version_":1565724328307195904}]
  }}

所以我不知道该怎么做......即使我有最新的Solr版本,我是否应该遵循第一个教程?我的目标很简单:按标签中的有效负载对响应进行排序。

1 个答案:

答案 0 :(得分:0)

假设可能的值或标签有限(不超过数千),恕我直言最简单的方法是:

  1. 将数据按照Solr更容易使用的格式,例如:

    { "id": "1", "tags": ["Cat", "Dog"], "tag_Cat": "0.8", "tag_Dog":"0.2"}
    
  2. 对于tag_ type字段,您可以定义一个涵盖所有可能性的dynamicField tag_ *,并将其索引到tfloat(也可能是docValues)

  3. 现在您可以在每次需要时通过相关字段(tag_Cat ...)轻松排序(或提升)。