java - 在 Solr 中使用有效负载获取分数

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

并且有效负载将被识别。但我不知道如何检查,我只看到搜索“Dog”的结果不是按有效负载排序的。

{
  "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. 将数据整理成某种更易于 Solr 使用的格式,例如:

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

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

关于java - 在 Solr 中使用有效负载获取分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628339/

相关文章:

java - SolrJ添加数据时出错

mysql - 如何使用 for 循环将新字段添加到文档索引 Lucene 中。

java - Lucene搜索保存文件内容时不返回结果

java - 使用 Java keytool 时如何将多个 key 用法添加到证书

java - 如何检测屏幕左侧或右侧是否执行了运动事件手势?

java - 如何以编程方式编辑 TextView 参数?

java - 由于 SolrJ、HttpClient、JVM 或我的应用程序中的 SSL 证书无效,类加载器泄漏?

java - Solr 如何使用邻近搜索和通配符进行 eDisMax 查询?

lucene - Luke 4.6.1 FormatTooNew 错误?

java - 如何防止随机匹配生成器重复?