2011-11-09 6 views
9

私はelasticsearchのPHPライブラリを使用して、私のウェブサイトで文書を索引付けしています。これは、インデックスを作成するためのコードです:Elasticsearchが単数形/複数形を返さない

curl -XPUT 'http://localhost:9200/test/' -d ' 
{ 
    "index": { 
    "numberOfShards": 1, 
    "numberOfReplicas": 1 
    } 
}' 

私は、インデックスを照会するインデックスとXGETにドキュメントを追加するカールXPUTを使用しています。これは、検索語の特異語と複数形が結果を返す間に索引全体で一致しないという事実を除いて、うまく機能します。たとえば、「ディスカッション」を検索すると、「ディスカッション」の一致は返されず、逆も同様です。なぜこれはそうですか?私はこれがデフォルトでelasticsearchで世話をすると考えました。単数形/複数形と一致するために明示的に言及しなければならないことはありますか?

答えて

6

は、どういうわけか私のために働いていない雪だるま式:あなたはそれはあなたのユースケースのためのより良い動作するかどうかを確認するためにあなたのテキストフィールドのSnowball Analyzerを使用して試すことができます。 私はポーターの茎を使用し、それは私のために完全に働いた。これは私が使用configです:

curl -XPUT localhost:9200/index_name -d ' 
{ 
"settings" : { 
    "analysis" : { 
     "analyzer" : { 
      "stem" : { 
       "tokenizer" : "standard", 
       "filter" : ["standard", "lowercase", "stop", "porter_stem"] 
      } 
     } 
    } 
}, 
"mappings" : { 
    "index_type_1" : { 
     "dynamic" : true, 
     "properties" : { 
      "field1" : { 
       "type" : "string", 
       "analyzer" : "stem" 
      }, 
      "field2" : { 
       "type" : "string", 
       "analyzer" : "stem" 
      } 
     } 
     } 
    } 
}' 
7

デフォルトのelascticsearchアナライザはステミングを行わず、これは複数形/単数形を扱う必要があります。私は@ imotovの回答にコメントで述べたようなエラーを取得しています...

curl -XPUT 'http://localhost:9200/test' -d '{ 
    "settings" : { 
     "index" : { 
      "number_of_shards" : 1, 
      "number_of_replicas" : 1 
     } 
    }, 
    "mappings" : { 
     "page" : { 
      "properties" : { 
       "mytextfield": { "type": "string", "analyzer": "snowball", "store": "yes"} 
      } 
     } 
    } 
}' 
+0

答えをありがとう。 – Ninja

+0

私はこれを試しましたが、エラーが発生しました: "メッセージ:値[雪ボール]でクラス設定[タイプ]をロードできませんでした"。私はここに何かをインストールする必要がありますか?もしそうなら、何からそしてどこから? – Ninja

+0

どのバージョンのelasticsearchを使用していますか?私は0.17とマスターでそれをテストし、両方のデフォルト設定で正常に動作します。あなたは何らかの方法でコマンドを修正しましたか? – imotov

6

「porterStem」フィルタは、あなたが「minimal_english」フィルタを使用する場合、それはより適している、過敏なので。 'porterStem'は、次のような単語の類似トークンを作成します。

「Test」を検索すると、「Test」、「Tests」、「Testing」、「Tester」などとなります。 al。

しかし、 'minimal_english'は、 'Test'と 'Tests'のみ表示されます。

+2

答えは最初のものよりずっと遅れていたので、正しいとは言えませんでしたが、これははるかに良い解決策です。スノーボールアナライザーはひどく不正確です。 porterStemは少し良くなり、使えるかもしれません。 kstemはさらに敏感ではなく、minimal_englishは最も敏感ではありません。しかし、雪玉は恐ろしいです。 –

+2

私はminimal_englishを見つけることができません.. – Sekai

+0

Javaコードの@Sekai minimal_englishはorg.apache.lucene.analysis.en.EnglishMinimalStemFilterからインポートできます。クエリで使用する場合は "filter:minimal_english" –