本文是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"
分享到:
相关推荐
而当我们使用Scala进行开发时,`solr-scala-client`就是专门为Scala开发者设计的Solr客户端库,它提供了一套简洁、强大的API,用于在Scala应用中与Solr进行交互。 **一、solr-scala-client简介** `solr-scala-...
在这个"solr入门java工程"中,我们将探讨如何使用Java客户端与华为FusionInsight SolrTest进行交互,以及如何在SolrCloud模式下进行分布式搜索。 首先,让我们了解Solr的基本概念。Solr的核心功能是提供高效的全文...
Solr学习笔记(三)——Solr客户端开发实例 在本文中,我们将深入探讨Solr客户端的开发,以便更好地理解如何在实际项目中利用Solr的强大功能。Solr是一款开源的全文搜索引擎,提供了高效的搜索和索引功能。通过Solr...
solarium, PHP Solr客户端库 Solarium PHP客户端库什么是 Solarium?Solarium是一个PHP客户端库,可以精确地模型Solr概念。 它的他多个cics库只处理与Solr的通信,因这里a 也使用一个文档化的API处理所有复杂的roo...
### Solr 搜索引擎知识点详解 #### Solr概述 **Solr** 是一款开源的、高性能的全文检索服务器,能够支持大规模数据集的快速搜索需求。它基于 **Apache Lucene** 开发,提供了丰富的功能集,包括全文检索、文档排序...
3. **Scalikesolr**: Scalikesolr 是 Solr 在 Scala 中的客户端库,它提供了简洁的 API,使得 Scala 开发者能够更自然地与 Solr 通信,进行索引构建、查询、管理和优化。 4. **Perl 和 Test::More**: Perl 是一种...
Solr Client SQL API是针对Apache Solr搜索引擎的一个扩展,它提供了使用SQL查询接口的能力,使得开发者可以使用更熟悉的SQL语法来操作Solr索引。在Java开发环境中,这个功能极大地提高了开发效率,降低了学习曲线,...
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
文档还提供了一个关于SolrJ的介绍,SolrJ是Solr的Java客户端,它支持与Solr服务器的交互。SolrJ还提供了版本兼容性处理、类路径设置、服务器连接设置以及使用嵌入式服务器等功能的指导。 最后,文档还提供了一些...
Solr 8.11.2是8.x系列的最后一个版本,新版本已经是9.0版本了。 1,什么是solr? Solr是一个独立的企业级搜索应用服务器,他对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务提供一定格式...
Solr 搭建步骤详解 Solr 是一款流行的开源搜索引擎 Server,基于 Lucene 搜索库。... Solr 搭建需要了解 Solr 的版本信息,搭建 Solr 服务,配置 Solr,搭建 Solr 客户端。通过这四步骤, Solr 搭建就完成了。
标题 "php solr client demo" 暗示我们要探讨的是如何在PHP中使用Solr客户端进行集成和操作。Solr是Apache Lucene项目的一个开源搜索引擎,它提供了强大的全文搜索、文档处理、分布式处理等功能。PHP Solr客户端则...
下面我们将详细介绍如何进行 Solr 6.0 与 MySQL 的集成配置。 **1. 安装与配置 Solr** 首先,你需要下载并安装 Solr 6.0。在官方网站上获取适合你操作系统的版本,解压后将 Solr 解压到指定目录。启动 Solr,通常...
SolrClient是专门为PHP开发的一款Solr客户端库,它允许开发者通过Composer进行安装和管理,以便于在PHP项目中方便地与Apache Solr搜索引擎进行交互。Apache Solr是一款开源的企业级搜索平台,常用于构建高性能的全文...
本文详细介绍了 Solr 的安装过程及 SolrCore 的配置方法。通过上述步骤,用户可以成功地在 CentOS 7 上部署并配置 Solr 搜索服务。此外,文中还提供了关于 Solr 目录结构和配置文件的深入解释,有助于更好地理解和...
Solarium PHP Solr客户端库什么是日光浴室? Solarium是一个PHP Solr客户端库,可以准确地建模Solr概念。 在许多其他Solr库仅处理与Solr的通信的地方,Solarium也使您可以使用有据可查的API来处理所有复杂的Solr查询...
Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款高效、灵活且强大的全文检索服务引擎。它构建在Lucene库之上,提供了更高级别的企业级搜索功能,如...
solr-client-一个node.js solr客户端安装使用以下方法安装库: npm install --save solr-client文献资料支持Node.js 6+版本。 支持Solr 3-8版本。 有关更多详细信息,请参见。 如果您要从早期版本升级,请参阅。 您...
总结来说,ASP.NET调用Solr涉及的主要知识点包括:使用SolrNet客户端库、配置Solr连接、索引和查询操作、利用Solr的高级功能以及性能优化。掌握这些要点,你就能在ASP.NET应用中构建出强大而高效的搜索功能。