9

個々のフィールドに異なるアナライザーを使用してElasticSearchインデックスを設定しようとしています。ただし、フィールド固有のアナライザーを設定する方法が見つからないようです。(テスト)インデックスを作成する方法は次のとおりです。

curl -XPOST localhost:9200/twitter
curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d '
{
    "tweet" : {
        "properties" : {
            "message" : {
                "type" : "string",
                "search_analyzer" : "snowball", 
                "index_analyzer" : "snowball"
            }
        }
    }
}'

ドキュメントを正しく読んだ場合、「tweet」タイプのインデックス「twitter」が作成され、「message」フィールドのコンテンツがスノーボールステミングアナライザーで分析されるはずです。これをテストするために、次のクエリを試しました。

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "message" : "Look, a fighting War-Unicorn!"
}'
curl -XGET localhost:9200/twitter/_search?q=fight

私が間違っていなければ、戦いは戦いの根幹であるため、これはヒットを返すはずです。問題は、そうではないということです。ヒット数がゼロになっています。ElasticSearchはマッピングを完全に無視しているように見えます(ElasticSearchはこれらのクエリをすべて受け入れますが、それぞれに対して「ok」が返されます)。

デフォルトのアナライザーをスノーボールアナライザーに置き換えてみましたが、うまくいきました。つまり、私は完全にフィールド固有のアナライザーを持っている必要があるので、これは私を助けません。また、さまざまなアナライザーや「インデックス」を「いいえ」に設定するなどのことも試しましたが、役に立ちませんでした。

私は何が間違っているのですか?

4

2 に答える 2

11

フィールド固有のアナライザーを使用するには、クエリでこのフィールドを指定する必要があります。それ以外の場合は、デフォルトのアナライザーが使用されます。試す

curl -XGET 'localhost:9200/twitter/_search?q=message:fight'

また

curl -XGET 'localhost:9200/twitter/_search?df=message&q=looking'
于 2011-06-03T16:58:08.333 に答える
0

https://github.com/lmenezes/elasticsearchを使用することをお勧めします-kopfはすべてのアナライザーをテストし、別のインデックスからmappをコピーして、インデックスを監視できます... http://www.elasticsearch.org/guide/en/elasticsearch /client/community/current/health.html

于 2014-12-29T11:20:00.113 に答える