使用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}}})   

只需使用此方式,就可以进行模糊搜索。

广告
将在 10 秒后关闭
bannerAds