使用Elastisch在Clojure中进行全文搜索
弹性是什么意思?
elastisch是Apache Lucene上运行的全文搜索系统Elasticsearch的clojure客户端。只需通过数据的POST就能自动创建索引,并且只需安装日本语的形态分析插件就能实现日本语的全文搜索。使用Elasticsearch,可以实现新闻网站等的”推荐给阅读这篇文章的人”功能,搜索网站的模糊搜索和”你是不是要找…”功能。
安装
安装Elasticsearch
请从官方网站下载并安装最新版本(截至2014年12月19日为止,版本号为1.4.2)。
$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.tar.gz
$ tar -xf elasticsearch.tar.gz
$ rm elasticsearch.tar.gz
$ mv elasticsearch-* elasticsearch
此外,在Mac环境下,也可以使用brew进行安装。
启动命令为./elasticsearch/bin/elasticsearch -f。
通过访问http://localhost:9200 进行启动确认,如果返回以下内容则表示正常运行。
{
"ok" : true,
"status" : 200,
"name" : "Hellstrom, Damion",
"version" : {
"number" : "1.4.2",
"build_hash" : "909b037218cf880e8772b066a764f179f2d5e719",
"build_timestamp" : "2014-12-18T16:08:16Z",
"build_snapshot" : false,
"lucene_version" : "4.6"
},
"tagline" : "You Know, for Search"
}
Elasticsearch的图形用户界面的使用方法以及日文全文搜索的方法是什么?
安装elasticsearch-head并使用elasticsearch的图形界面
用Elasticsearch进行全文搜索的日语检索
Elasticsearch 使用日语进行全文搜索第一部分。
请参考以下的内容。
弹性安装
如果你使用Leiningen的话,请在project.clj文件的dependencies部分添加以下内容。
[clojurewerkz/elastisch "2.1.0"]
使用方法 (Shiyong fangshi)
以下的操作都是在Elasticsearch启动的情况下进行的。
建立连接、创建数据集
(ns elastisch-sample
(:require [clojurewerkz.elastisch.rest :as esr]
[clojurewerkz.elastisch.rest.index :as esi]
[clojurewerkz.elastisch.rest.document :as esd]))
(defn -main
[& args]
(let [conn (esr/connect "http://127.0.0.1:9200")
mapping-types {"book" {:properties {:title {:type "string" :analyzer "snowball"}
:author {:type "string"}
:year {:type "integer"}}}}]
(esi/create conn "testindex" :mappings mapping-types))
首先,使用(clojurewerkz.elastisch.rest/connect “http://127.0.0.1:9200”)来连接到Elasticsearch。
在Elasticsearch中,即使没有预先指定数据集的类型,它也可以运行。但是,为了预先确定数据集的类型,可以创建一个用于映射的关联数组,并且可以同时使用(clojurewerkz.elastisch.rest.index/create conn “testindex” :mappings mapping-types)来生成索引和类型(类似于RDB中的数据库和表)注册。在此过程中,还可以通过analyzer指定索引创建和查询分析的数据处理方法。
以下のように記述されています。
Elasticsearch入门
你好!Elasticsearch
实践!弹性搜索
请参考这个。
資料的登記是
(let [data {:title "primer of elastisch" :author "taro" :year "2014"}]
(clojurewerkz.elastisch.rest.document/create "testindex" "book" data))
以类似的方式,指定了注册位置的索引和类型,然后按顺序创建和注册数据的关联数组。
搜索。
在搜索已注册数据时,我们使用clojurewerkz.elastisch.rest.document、clojurewerkz.elastisch.query和clojurewerkz.elastisch.rest.response。
(ns clojurewerkz.elastisch.docs.examples
(:require [clojurewerkz.elastisch.rest :as esr]
[clojurewerkz.elastisch.rest.document :as esd]
[clojurewerkz.elastisch.query :as q]
[clojurewerkz.elastisch.rest.response :as esrsp]
[clojure.pprint :as pp]))
(defn -main
[& args]
(let [conn (esr/connect "http://127.0.0.1:9200")
res (esd/search conn "testindex" "book" :query {:term {:title "elistisch"}})
n (esrsp/total-hits res)
hits (esrsp/hits-from res)]
(println (format "Total hits: %d" n))
(pp/pprint hits)))
通过esd/search发送搜索查询。在上面的例子中,将搜索包含标题elitisch的数据。可以通过(esrsp/total-hits res)获取搜索命中数量,并通过(esrsp/hits-from res)获取以下搜索结果。
[{:_index "testindex",
:_type "book",
:_id "AUpi5KYEf1scKu3S3YhW",
:_score 0.15342641,
:_source
{:author "taro", :year "2014", :title "primer of elastisch"}}
{:_index "testindex",
:_type "book",
:_id "AUpi6B8qf1scKu3S3YhZ",
:_score 0.19178301,
:_source
{:author "jiro", :year "2013", :title "effective elastisch"}}
]
因为以上例子只是最简单的单词搜索,例如如果您在搜索词中打错了字,比如输入了”elistisch”,将不会返回任何结果。为了处理这种模糊搜索,Elasticsearch实现了模糊搜索功能,并且在”elasitisch”中也有该功能。
res (esd/search conn "testindex" "book" :query {:fuzzy {:title
{:value "elistisch"
:boost 1.2
:min_similarity 0.5
:prefix_length 0}}})
只需使用此方式,就可以进行模糊搜索。