【问题标题】:Solrj-scala: how to query for a field that may not be there?Solrj-scala:如何查询可能不存在的字段?
【发布时间】:2017-11-28 23:31:26
【问题描述】:

当我们在 scala 中使用 Solrj 时,查询文档中可能不存在的字段值的好方法是什么?得到Option[Any] 作为回应将是理想的。如果它是一个多值字段,那么获得空列表将是理想的。

现在我得到 NullPointerException:

import org.apache.solr.client.solrj.SolrQuery
import org.apache.solr.client.solrj.impl.CloudSolrClient
import org.apache.solr.client.solrj.request.QueryRequest
import org.apache.solr.common.SolrDocument
import scala.collection.JavaConversions._

val solrClientBuilder = new CloudSolrClient.Builder
val client: CloudSolrClient = solrClientBuilder.withZkHost("zookeeper.myhost.net:2181").build()

client.setDefaultCollection("skus")
client.setIdField("sku")

val solrQuery = new SolrQuery()
solrQuery.setQuery(s"sku:13614994")
solrQuery.setFields("inventoryLevel, skuCCs") // skuCCs might not be present in document
val params = new QueryRequest(solrQuery).getParams

val solrDocumentList: List[SolrDocument] = for {
  doc <- client.query(solrAlias, params).getResults.toList
} yield doc.asInstanceOf[SolrDocument]

val inventoryLevel: String = solrDocumentList.map(
  _.getFieldValue("inventoryLevel").toString
).headOption.getOrElse("unknown")

// this throws NullPointerException if there is no such field in document:
val skuCCs: List[String] = for {
  doc <- solrDocumentList
  skuCC <- doc.getFieldValues("skuCCs").toList
} yield skuCC.toString

Solr 是 6.6 版。

【问题讨论】:

    标签: scala solr solrj


    【解决方案1】:

    找到了。

    val skuCCs: List[String] = for {
      doc <- solrDocumentList
      name <- doc.getFieldNames
      if name == "skuCCs"
      skuCC <- doc.getFieldValues(name).toList
    } yield skuCC.toString
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 2018-12-02
      • 1970-01-01
      相关资源
      最近更新 更多