0

私はPlayとElasticSearchの両方の初心者であり、POC用にそれらを構成しようとしています。CRUDモジュール(Play 1.2.4)を使用して、Bookというモデルを作成しました

@ElasticSearchable
@Entity
public class Book extends Model{

    @Required
    public String title ;
    @Required
    public String author ;
    @Required
    public String publisher ;
    public String binding ;
    @Required
    public double price ;
    public double discount ;
    @Required
    @MaxLength(4)
    public String releasedYear ;
    @Required
    public boolean inStock ;
    public String language ;
    public String deliveryTime ;
}

そして、インメモリデータベースH2にいくつかのレコードを作成し、それらのレコードをelasticsearchノードでインデックス付けしました(ローカルマシンを使用してESを実行しています)

ES管理インターフェース(PlayでESモジュールを使用するときにデフォルトで提供される)を使用して検索しようとすると、奇妙な問題が発生します。

「初心者向けJava」というタイトルの本が1冊あり、ES-Adminインターフェイスからフィールドタイトルに対して用語クエリを実行しようとしています。

{"query" : {"term" : { "title" : "Java for beginners" }}}

そしてそれは私を返します

{
took: 3
timed_out: false
_shards: {
total: 5
successful: 5
failed: 0
}
hits: {
total: 0
max_score: null
hits: [ ]
}
}

これは本質的に、一致するレコードがないことを意味します

不思議なことに、クエリをに変更すると

{"query" : {"term" : { "title" : "beginners" }}}

次のようにレコードが返されます

{
took: 3
timed_out: false
_shards: {
total: 5
successful: 5
failed: 0
}
hits: {
total: 1
max_score: 0.19178301
hits: [
{
_index: models_book
_type: models_book
_id: 1
_score: 0.19178301
_source: {
title: Java for beginners
author: Bruce Eckel
publisher: Timburys
binding: Paperback
price: 450
discount: 10
releasedYear: 2010
inStock: true
language: English
deliveryTime: 3 days
id: 1
}
}
]
}
}

誰かがこれに光を当てることができれば、それは大きな助けになるでしょう。正しい方向への助けは大歓迎です

ありがとう

4

1 に答える 1

2

用語クエリを使用する場合、検索対象の用語は分析されません。つまり、通常は単一の用語である必要があります。分析する必要のある文字列をクエリする場合は、query_stringクエリタイプを使用する必要があります。

このクエリはあなたのために働くはずです:

curl -s "localhost:9200/test/_search" -d '
{
  "query":{
    "query_string":{
      "query":"Java for beginners"
    }
  }
}'
于 2012-05-11T11:48:04.723 に答える