私は私のウェブサイトで文書を索引付けして見つけるためにelasticsearchのphpライブラリを使っています。これはインデックスを作成するためのコードです。
curl -XPUT "http://localhost:9200/test/" -d "
{
"index": {
"numberOfShards": 1,
"numberOfReplicas": 1
}
}"
私はそれからドキュメントを追加するためにcurl XPUTを使います索引を照会するための索引およびXGET。結果を返す間、単数形と複数形のクエリワードがインデックス全体で一致しないという事実を除いて、これはうまく機能します。たとえば、「ディスカッション」を検索しても「ディスカッション」の一致は返されず、その逆もありません。これはなぜですか。これはelasticsearchのデフォルトで処理されていると思いました。単数形/複数形に一致するために明示的に言及しなければならないことはありますか?
回答:
回答№1の場合は7デフォルトのelascticsearchアナライザはステミングしません。これは複数形/単数形を処理するために必要なものです。 スノーボールアナライザー あなたのテキストフィールドがあなたのユースケースのためにそれがよりうまく働くかどうか見るために
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"}
}
}
}
}"
回答№2の6
どういうわけかsnowballは私のために働いていません... @imotovの答えへのコメントで述べたようにエラーを得ています。 私はポーターステムを使いました、そしてそれは私のために完璧に働きました。これは私が使用した設定です:
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"
}
}
}
}
}"
回答№3の6
"porterStem"フィルタは過敏なので、 "minimal_english"フィルタを使うとより適しています。 "porterStem"は次のような単語に対して同様のトークンを作成します。
"Test"を検索すると、 "Test"、 "Tests"、 "Testing"、 "Tester"などの結果になります。 al。
しかし、「minimal_english」は「Test」と「Tests」しか得られません。