9

私はelasticsearchのphpライブラリを使用して、自分のWebサイトでドキュメントをインデックス付けして検索しています。これは、インデックスを作成するためのコードです。

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

次に、curl XPUT を使用してドキュメントをインデックスに追加し、XGET を使用してインデックスをクエリします。これは、検索語の単数形と複数形が結果を返すときにインデックス全体で一致しないという事実を除いて、うまく機能します。たとえば、「discussions」を検索すると、「discussion」の一致は返されず、その逆も同様です。これはなぜですか?これはelasticsearchでデフォルトで処理されると思いました。単数形/複数形に一致させるために明示的に言及しなければならないことはありますか?

4

3 に答える 3

7

デフォルトの elascticsearch アナライザーはステミングを行いません。これは、複数形/単数形を処理するために必要なものです。テキスト フィールドにSnowball Analyzerを使用してみて、ユースケースにより適しているかどうかを確認できます。

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"}
            }
        }
    }
}'
于 2011-11-09T16:39:12.127 に答える
7

どういうわけか雪だるまがうまくいきません... @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"
            }
         }
      }
   }
}'
于 2011-11-14T05:56:17.460 に答える
6

「porterStem」フィルターは過敏なので、「minimal_english」フィルターを使用するとより適しています。「porterStem」は、次のような単語に対して同様のトークンを作成します。

「Test」を検索すると、「Test」、「Tests」、「Testing」、「Tester」などが表示されます。アル。

しかし、'minimal_english' は 'Test' と 'Tests' しか得られません。

于 2012-12-20T12:10:18.010 に答える