1

オブジェクトのインデックスを作成しており、完全なフレーズ検索と部分一致の両方を実行できるようにしたいと考えています。このタイプは「deponent」と呼ばれ、単純化されたインデックスの作成を以下に示します。

{
   "deponent": {
      "properties": {         
         "name": {
            "type": "multi_field",
            "fields": {
               "name": {
                  "type": "string"
               },
               "full": {
                  "type": "string",
                  "index": "not_analyzed",
                  "omit_norms": true,
                  "index_options": "docs",
                  "include_in_all": false
               }
            }
         }
      }
   }
}

これの目的は、「name」フィールドの値を 2 回索引付けすることです。1 回目はフィールド内の個々の単語が分割されていない場所 (name.full) で、もう 1 回は単語が分割されている場所 (name.name) です。

名前フィールドが「ダニー・ワトソン博士」に設定されている索引付けされた文書があります。用語クエリを実行すると、次の動作が発生すると予想されます (クエリ文字列はドキュメントに従って分析されません)。

  1. 「Danny Watson 博士」を使用し てname.fullを検索すると、レコードが返されるはずです。
  2. 「Watson」を使用してname.fullを検索すると、レコード返されない
  3. 「Danny Watson 博士」を使用してname.nameを検索すると、レコードは返されません。
  4. 「Watson」を使用してname.nameを検索すると、レコードが返されるはずです

上記の 4 つの点に対するクエリ:

1 - 期待どおりに動作します (レコードを返します)

{
    "query" : {
        "term": {
           "name.full": {
              "value": "Dr. Danny Watson"
           }
        }
    }   
}

2 - 期待どおりに動作する (レコードを返さない)

{
    "query" : {
        "term": {
           "name.full": {
              "value": "Watson"
           }
        }
    }   
}

3 - 期待どおりに動作します (レコードを返しません)

{
    "query" : {
        "term": {
           "name.name": {
              "value": "Dr. Danny Watson"
           }
        }
    }   
}

4 -期待どおりに動作しない- レコードが返されない

{
    "query" : {
        "term": {
           "name.name": {
              "value": "Watson"
           }
        }
    }   
}

そのため、何かについての私の理解に欠陥があるようです。私は何が欠けていますか?

4

1 に答える 1