0

MongoDBをElasticSearchと統合する

次のコマンドを使用して、ターミナルからデータベース「testmongo」のコレクション「person」にインデックスを付けました。

curl -XPUT 'http://localhost:9200/_river/mongodb/_meta' -d '{ 
    "type": "mongodb", 
    "mongodb": { 
        "db": "testmongo", 
        "collection": "person"
    }, 
    "index": {
        "name": "mongoindex", 
        "type": "person" 
    }
}'

そして、mongoターミナルを介してmongodbにいくつかのデータを追加します。

use testmongo
var p = {firstName: "John", lastName: "Doe"}
db.person.save(p)

次のコマンドを使用して、データを検索します。

curl -XGET 'http://localhost:9200/mongoindex/_search?q=firstName:John'

ここまではすべてが完璧に機能します

私の問題はこれです:

方法、クエリするクライアントノードを作成する必要があります次のコードが機能しません:

    package code
    package snippet

    import net.liftweb._
    import http._
    import common._
    import util.Helpers._
    import scala.xml._
    import org.elasticsearch.node.NodeBuilder._
    import org.elasticsearch.index.query.QueryBuilders._
    import collection.JavaConversions._


    class SearchTerms extends StatefulSnippet with Loggable{


      private var term = ""

      def dispatch = {
        case "render" => render _
      }

      def render( xhtml: NodeSeq ): NodeSeq = {

        def doSearchTerm {

          val node = nodeBuilder().client(true).node()
          val client = node.client()

          val query = queryString( term )
          val response = client
            .prepareSearch("A")
            .setTypes("B")
            .setQuery(query)
            .execute()
            .actionGet()

          val hits = response.getHits

          logger.info( "Found %d hits for query '%s'".format( hits.getTotalHits, term ) )

          hits.getHits.foreach(hit =>
            logger.info("* %s".format(hit.sourceAsMap()("text")))
          )

          client.close()
          node.close()
        }

Scalaリフトで検索機能を使用するためにAとBで使用する必要がある値は何ですか?

誰か助けてくれませんか

ご清聴ありがとうございました

4

1 に答える 1

0

私はそれが次のようだと思います:

  • インデックス名としてのmongoindex
  • タイプ名としての人

だから、次のようなもの:

      val response = client
        .prepareSearch("mongoindex")
        .setTypes("person")
        .setQuery(query)
        .execute()
        .actionGet()

それは役に立ちますか?

ところで、用語には「firstName:John」のようなものを含める必要があります

于 2012-12-03T19:06:25.003 に答える