3

タグ (コンマで区切られたタグの文字列)、作成者、テスターなど、複数のフィールドを持つ問題インデックスがあります。これらすべてのフィールドで一度に問題を検索できるグローバル検索を作成しています。私はブールクエリを使用しています。

{
    "query": {
        "bool": {
            "must": [{
                    "match": {
                        "author": "author_username"
                    }
                },
                {
                    "match": {
                        "tester": "tester_username"
                    }
                },
                {
                    "match": {
                        "tags": "<tag1,tag2>"
                    }
                }

            ]
        }
    }
}

Analyzer がなくても結果を取得できますが、セパレータとしてスペースを使用します。たとえば、python 3 は python または 3 として検索されます。

しかし、Python 3 を単一のクエリとして検索したかったのです。そのため、タグのアナライザーを作成して、標準の空白ではなく、すべてのコンマ区切りタグが 1 つと見なされるようにしました。

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "tags": {
        "type": "text",
        "analyzer": "my_analyzer", 
        "search_analyzer": "standard" 
      }
    }
  }
}

しかし今、私は何の結果も得ていません。ここで何が欠けているか教えてください。ドキュメントの複合クエリでのアナライザーの使用を見つけることができません: https://www.elastic.co/guide/en/elasticsearch/reference/current/compound-queries.html

例を追加します。

{

   "query": {
        "bool": {
            "must": [{
                    "match": {
                        "author": "test1"
                    }
                },
                {
                    "match": {
                        "tester": "test2"
                    }
                },
                {
                    "match": {
                        "tags": "test3, abc 4"
                    }
                }

            ]
        }
    }
}

結果はすべてのフィールドと一致する必要がありますが、タグフィールドの場合はタグの結合が必要であり、クエリはスペースではなくコンマで区切る必要があります。つまり、クエリはtestabc 4に一致する必要がありますが、test、abc、および 4 を検索するクエリの上にあります。

4

1 に答える 1