`

Solr的Scala客户端(scalikesolr)介绍

阅读更多
本文是scalikesolr的wiki的翻译

后边的代码片段使用了如下文档产生的索引"example/exampledocs/books.json".

{
  "id" : "978-0641723445",
  "cat" : ["book","hardcover"],
  "title" : "The Lightning Thief",
  "author" : "Rick Riordan",
  "series_t" : "Percy Jackson and the Olympians",
  "sequence_i" : 1,
  "genre_s" : "fantasy",
  "inStock" : true,
  "price" : 12.50,
  "pages_i" : 384
},
{
  "id" : "978-1423103349",
  "cat" : ["book","paperback"],
  "title" : "The Sea of Monsters",
  "author" : "Rick Riordan",
  "series_t" : "Percy Jackson and the Olympians",
  "sequence_i" : 2,
  "genre_s" : "fantasy",
  "inStock" : true,
  "price" : 6.49,
  "pages_i" : 304
}

查询

简单查询

使用核心查询参数普通查询参数

import com.github.seratch.scalikesolr._

val client = Solr.httpServer(new URL("http://localhost:8983/solr")).newClient
val request = new QueryRequest(writerType = WriterType.JavaBinary, query = Query("author:Rick")) // faster when using WriterType.JavaBinary
val response = client.doQuery(request)
println(response.responseHeader)
println(response.response)
response.response.documents foreach {
  case doc => {
    println(doc.get("id").toString()) // "978-1423103349"
    println(doc.get("cat").toListOrElse(Nil).toString) // List(book, hardcover)
    println(doc.get("title").toString()) // "The Sea of Monsters"
    println(doc.get("pages_i").toIntOrElse(0).toString) // 304
    println(doc.get("price").toDoubleOrElse(0.0).toString) // 6.49
  }
}


从SolrDocument绑定到对象

需要无参构造器和字段设置器。也可以指定有一个字符串作为参数的构造器的用户定义类型

case class PageI(val value: String = "")
case class Book(
  var id: String = "",
  var cat: List[String] = Nil,
  var price: Double = 0.0,
  var pageI: PageI = PageI(),
  var sequenceI: Int = 0 ) {
  def this() = {
    this ("", Nil, 0.0, PageI(), 0)
  }
}
val book = doc.bind(classOf[Book])
println(book.id) // "978-1423103349"
println(book.cat.size) // 2
println(book.price) // 6.49
println(book.pageI.value) // 304
println(book.sequenceI) // 2


使用高亮

使用高亮参数:

val request = new QueryRequest(
  writerType = WriterType.JSON, // but JSON format might be slow...
  query = Query("author:Rick"),
  sort = Sort("page_i desc")
)
request.highlighting = HighlightingParams(true)
val response = client.doQuery(request)
println(response.highlightings)
response.highlightings.keys foreach {
  case key => {
    println(key + " -> " + response.highlightings.get(key).get("author").toString)
    // "978-0641723445" -> "[i]Rick[/i] Riordan"
  }
}


使用MoreLikeThis

使用推荐:

val request = new QueryRequest(Query("author:Rick"))
request.moreLikeThis = MoreLikeThisParams(
  enabled = true,
  count = 3,
  fieldsToUseForSimilarity = FieldsToUseForSimilarity("body")
)
val response = client.doQuery(request)
println(response.moreLikeThis)
response.response.documents foreach {
  doc => {
    val id = doc.get("id").toString
    response.moreLikeThis.getList(id) foreach {
      case recommendation => {
        println(recommendation) // "SolrDocument(WriterType(standard),,Map(start -> 0, numFound -> 0))"
      }
    }
  }
}


使用多层面查询(FacetQuery)

使用简单的多层面查询参数:

val request = new QueryRequest(Query("author:Rick"))
request.facet = new FacetParams(
  enabled = true,
  params = List(new FacetParam(Param("facet.field"), Value("title")))
)
val response = client.doQuery(request)
println(response.facet.facetFields)
response.facet.facetFields.keys foreach {
  case key => {
    val facets = response.facet.facetFields.getOrElse(key, new SolrDocument())
    facets.keys foreach {
      case facetKey => println(facetKey + " -> " + facets.get(facetKey).toIntOrElse(0))
      // "thief" -> 1, "sea" -> 1, "monster" -> 1, "lightn" -> 1
    }
  }
}


使用结果集分组(Groupiong) /字段折叠(Field Collapsing)

val request = new QueryRequest(Query("genre_s:fantasy"))
request.group = new GroupParams(
  enabled = true,
  field = Field("author_t")
)
val response = client.doQuery(request)
println(response.groups.toString)
response.groups.groups foreach {
  case group => println(group.groupValue + " -> " + group.documents.toString)
  // "r.r" -> List(SolrDocument(...
  // "glen" -> List(SolrDocument(...
}


分布式查询

使用分布式查询:

val request = new QueryRequest(Query("genre_s:fantasy"))
request.shards = new DistributedSearchParams(
  shards = List(
    "localhost:8984/solr",
    "localhost:8985/solr"
  )
)
val response = client.doQuery(request)
println(response.groups.toString)


数据导入命令(DIH Command)

数据导入的命令:

val request = new DIHCommandRequest(command = "delta-import")
val response = client.doDIHCommand(request)
println(response.initArgs)
println(response.command)
println(response.status)
println(response.importResponse)
println(response.statusMessages)



文档更新

更新Solr索引的XML信息:

添加/更新文档

向Solr中添加文档:

val request = new UpdateRequest()
val doc1 = SolrDocument(
  writerType = WriterType.JSON,
  rawBody = """
  { "id" : "978-0641723445",
    "cat" : ["book","hardcover"],
    "title" : "The Lightning Thief",
    "author" : "Rick Riordan",
    "series_t" : "Percy Jackson and the Olympians",
    "sequence_i" : 1,
    "genre_s" : "fantasy",
    "inStock" : true,
    "price" : 12.50,
    "pages_i" : 384
  }"""
)
val doc2 = SolrDocument(
writerType = WriterType.JSON,
rawBody = """
  { "id" : "978-1423103349",
    "cat" : ["book","paperback"],
    "title" : "The Sea of Monsters",
    "author" : "Rick Riordan",
    "series_t" : "Percy Jackson and the Olympians",
    "sequence_i" : 2,
    "genre_s" : "fantasy",
    "inStock" : true,
    "price" : 6.49,
    "pages_i" : 304
  }"""
)
request.documents = List(doc1, doc2)
val response = client.doUpdateDocuments(request)
client.doCommit(new UpdateRequest)


删除文档

val request = new DeleteRequest(uniqueKeysToDelete = List("978-0641723445"))
val response = client.doDeleteDocuments(request)
client.doCommit(new UpdateRequest)
Commit

val response = client.doCommit(new UpdateRequest())
Rollback

val response = client.doRollback(new UpdateRequest())
Optimize

val response = client.doOptimize(new UpdateRequest())
Add / Update documents in CSV format

val request = new UpdateRequest(
  requestBody = "id,name,sequence_i\n0553573403,A Game of Thrones,1\n..."
)
val response = client.doUpdateDocumentsInCSV(request)
client.doCommit(new UpdateRequest)


以XML格式更新:

val request = new UpdateRequest(
  requestBody = "<optimize/>"
)
val response = client.doUpdateInXML(request)


以JSON格式更新:

val request = new UpdateRequest(
  writerType = WriterType.JSON,
  requestBody = "{ 7b1debea0390ffbb4e49e2f145a1625ea6ec7011quot;optimize7b1debea0390ffbb4e49e2f145a1625ea6ec7011quot;: { 7b1debea0390ffbb4e49e2f145a1625ea6ec7011quot;waitFlush7b1debea0390ffbb4e49e2f145a1625ea6ec7011quot;:false, 7b1debea0390ffbb4e49e2f145a1625ea6ec7011quot;waitSearcher7b1debea0390ffbb4e49e2f145a1625ea6ec7011quot;:false } }"
)
val response = client.doUpdateInJSON(request)


从更新格式中加载文档

不支持JSON格式

XML格式

val xmlString = "<add><doc><field name=ece0aa4e60e0be0d48ee70d07ac10cec4e21eecaquot;employeeIdece0aa4e60e0be0d48ee70d07ac10cec4e21eecaquot;>05991</field><field name=ece0aa4e60e0be0d48ee70d07ac10cec4e21eecaquot;officeece0aa4e60e0be0d48ee70d07ac10cec4e21eecaquot;>Bridgewater</field>..."
val docs = UpdateFormatLoader.fromXMLString(xmlString)
docs foreach {
  case doc => {
    println("employeeId:" + doc.get("employeeId").toString()) // "05991"
    println("office:" + doc.get("office").toString()) // "Bridgewater"
  }
}


CSV格式

val csvString = "id,name,sequence_i\n0553573403,A Game of Thrones,1\n..."
val docs = UpdateFormatLoader.fromCSVString(csvString)
docs foreach {
  case doc => {
    println(doc.get("id")) // "0553573403"
    println(doc.get("name")) // "A Game of Thrones"
    println(doc.get("sequence_i").toIntOrElse(0)) // 1
  }
}



Ping

val response = client.doPing(new PingRequest())
println(response.status) // "OK"
0
0
分享到:
评论

相关推荐

    solr-scala-client:Scala的Solr客户端

    而当我们使用Scala进行开发时,`solr-scala-client`就是专门为Scala开发者设计的Solr客户端库,它提供了一套简洁、强大的API,用于在Scala应用中与Solr进行交互。 **一、solr-scala-client简介** `solr-scala-...

    solr入门java工程

    在这个"solr入门java工程"中,我们将探讨如何使用Java客户端与华为FusionInsight SolrTest进行交互,以及如何在SolrCloud模式下进行分布式搜索。 首先,让我们了解Solr的基本概念。Solr的核心功能是提供高效的全文...

    Solr学习笔记(三)Solr客户端开发实例

    Solr学习笔记(三)——Solr客户端开发实例 在本文中,我们将深入探讨Solr客户端的开发,以便更好地理解如何在实际项目中利用Solr的强大功能。Solr是一款开源的全文搜索引擎,提供了高效的搜索和索引功能。通过Solr...

    solarium, PHP Solr客户端库.zip

    solarium, PHP Solr客户端库 Solarium PHP客户端库什么是 Solarium?Solarium是一个PHP客户端库,可以精确地模型Solr概念。 它的他多个cics库只处理与Solr的通信,因这里a 也使用一个文档化的API处理所有复杂的roo...

    Solr搜索引擎

    ### Solr 搜索引擎知识点详解 #### Solr概述 **Solr** 是一款开源的、高性能的全文检索服务器,能够支持大规模数据集的快速搜索需求。它基于 **Apache Lucene** 开发,提供了丰富的功能集,包括全文检索、文档排序...

    scalikesolr_2.9.2-4.2.3.zip

    3. **Scalikesolr**: Scalikesolr 是 Solr 在 Scala 中的客户端库,它提供了简洁的 API,使得 Scala 开发者能够更自然地与 Solr 通信,进行索引构建、查询、管理和优化。 4. **Perl 和 Test::More**: Perl 是一种...

    solr_client_sql_api:solr sql客户端封装

    Solr Client SQL API是针对Apache Solr搜索引擎的一个扩展,它提供了使用SQL查询接口的能力,使得开发者可以使用更熟悉的SQL语法来操作Solr索引。在Java开发环境中,这个功能极大地提高了开发效率,降低了学习曲线,...

    java solr solrj 带账号密码增量查询添加索引

    主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询

    solr基础知识介绍

    文档还提供了一个关于SolrJ的介绍,SolrJ是Solr的Java客户端,它支持与Solr服务器的交互。SolrJ还提供了版本兼容性处理、类路径设置、服务器连接设置以及使用嵌入式服务器等功能的指导。 最后,文档还提供了一些...

    已编译版本solr-8.11.2.tgz

    Solr 8.11.2是8.x系列的最后一个版本,新版本已经是9.0版本了。 1,什么是solr? Solr是一个独立的企业级搜索应用服务器,他对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务提供一定格式...

    solr搭建步骤

    Solr 搭建步骤详解 Solr 是一款流行的开源搜索引擎 Server,基于 Lucene 搜索库。... Solr 搭建需要了解 Solr 的版本信息,搭建 Solr 服务,配置 Solr,搭建 Solr 客户端。通过这四步骤, Solr 搭建就完成了。

    php solr client demo

    标题 "php solr client demo" 暗示我们要探讨的是如何在PHP中使用Solr客户端进行集成和操作。Solr是Apache Lucene项目的一个开源搜索引擎,它提供了强大的全文搜索、文档处理、分布式处理等功能。PHP Solr客户端则...

    solr6.0+mysql集成配置

    下面我们将详细介绍如何进行 Solr 6.0 与 MySQL 的集成配置。 **1. 安装与配置 Solr** 首先,你需要下载并安装 Solr 6.0。在官方网站上获取适合你操作系统的版本,解压后将 Solr 解压到指定目录。启动 Solr,通常...

    SolrClient:Solr客户端

    SolrClient是专门为PHP开发的一款Solr客户端库,它允许开发者通过Composer进行安装和管理,以便于在PHP项目中方便地与Apache Solr搜索引擎进行交互。Apache Solr是一款开源的企业级搜索平台,常用于构建高性能的全文...

    solr安装和介绍

    本文详细介绍了 Solr 的安装过程及 SolrCore 的配置方法。通过上述步骤,用户可以成功地在 CentOS 7 上部署并配置 Solr 搜索服务。此外,文中还提供了关于 Solr 目录结构和配置文件的深入解释,有助于更好地理解和...

    日光浴室:PHP Solr客户端库

    Solarium PHP Solr客户端库什么是日光浴室? Solarium是一个PHP Solr客户端库,可以准确地建模Solr概念。 在许多其他Solr库仅处理与Solr的通信的地方,Solarium也使您可以使用有据可查的API来处理所有复杂的Solr查询...

    solr搜索引擎的使用介绍

    Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款高效、灵活且强大的全文检索服务引擎。它构建在Lucene库之上,提供了更高级别的企业级搜索功能,如...

    solr-node-client:Node.js的Solr客户端

    solr-client-一个node.js solr客户端安装使用以下方法安装库: npm install --save solr-client文献资料支持Node.js 6+版本。 支持Solr 3-8版本。 有关更多详细信息,请参见。 如果您要从早期版本升级,请参阅。 您...

    asp.net调用Solr

    总结来说,ASP.NET调用Solr涉及的主要知识点包括:使用SolrNet客户端库、配置Solr连接、索引和查询操作、利用Solr的高级功能以及性能优化。掌握这些要点,你就能在ASP.NET应用中构建出强大而高效的搜索功能。

Global site tag (gtag.js) - Google Analytics