博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[elixir! #0033] 在 elixir 项目中使用 riak 数据库(2) ---- 启用 solr 搜索
阅读量:6316 次
发布时间:2019-06-22

本文共 1672 字,大约阅读时间需要 5 分钟。

solr

Solr是一个高性能,采用Java5开发,

基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了> 优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

在 riak 中配置

riakKV 2.0 版本以上内置了 solr, 我们只需要开启搜索功能.

vi /etc/riak/riak.conf

设置

search = on

还需要在 /etc/hosts 文件中添加主机名(与 elixir 项目中的地址相同), 以便 solr 能够访问

192.168.10.83    any_name

启动 riak.

在 elixir 项目中使用

我们首先来尝试一下 counter 类型的搜索方法. 我们需要一个名为 "player" 的 bucket, 其中包含每位 player 的得分 score.

启动上回配置好的 elixir 项目

$ iex -S mixiex> Riak.Search.Index.put "scores":ok

在 riak 中更新 Index:

riak-admin bucket-type update counters '{"props":{"search_index":"scores"}}'

添加新的 counter:

iex> import RiakCounterRiakCounteriex> create_counter("people", "Kobe score", 10):okiex> create_counter("people", "James score", 12):okiex> change_counter("people", "Kobe score", 5):ok

现在, 我们往"people" bucket 中添加了两个 counter, 而我们已经为 counter 这种 bucket-type 添加了索引 scores. 所以, 让我们来编写一些查询代码:

defmodule RiakApp.Search do  @moduledoc false  alias Riak.Search  @doc false  def search(index, query) do    {:ok, {_, result, _, num_found}} = Search.query(index, query)    {num_found, Enum.map(result, &get_value/1)}  end  defp get_value({_, data}) do    bucket = :proplists.get_value("_yz_rb", data)    type   = :proplists.get_value("_yz_rt", data)    key    = :proplists.get_value("_yz_rk", data)    value  = List.last(data)        %{bucket: bucket, type: type, key: key, value: value}  endend

试着运行一下:

iex> import RiakApp.Search                       RiakApp.Searchiex> search("scores", "counter:[* TO 15]"){2, [%{bucket: "people", key: "James score", type: "counters",    value: {"counter", "12"}},  %{bucket: "people", key: "Kobe score", type: "counters",    value: {"counter", "15"}}]}

就先到这里吧.

转载地址:http://jbuaa.baihongyu.com/

你可能感兴趣的文章
BOM:文档对象模型 --树模型
查看>>
我的Android进阶之旅------>WindowManager.LayoutParams介绍
查看>>
segment
查看>>
获取鼠标的原始移动值
查看>>
Linux信号 编程
查看>>
有关滚动与位置
查看>>
Box2D自定义重力
查看>>
chpasswd
查看>>
mysqldump --single-transaction 和--lock-tables参数详解
查看>>
android 数据库_sql语句总结
查看>>
python购物车
查看>>
解决python2和python3的pip冲突
查看>>
面试/编程
查看>>
linux每日命令(16):head命令
查看>>
公司内部分享【富有成效的每日站会】总结
查看>>
打造一个上传图片到图床利器的插件(Mac版 开源)
查看>>
iOS横竖屏
查看>>
thinkphp判断更新是否成功
查看>>
Do While ... Loop 与 Do Until ... Loop 的区别
查看>>
【Linux】查询某个字符串出现次数
查看>>