タグ (コンマで区切られたタグの文字列)、作成者、テスターなど、複数のフィールドを持つ問題インデックスがあります。これらすべてのフィールドで一度に問題を検索できるグローバル検索を作成しています。私はブールクエリを使用しています。
{
"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"
}
}
]
}
}
}
結果はすべてのフィールドと一致する必要がありますが、タグフィールドの場合はタグの結合が必要であり、クエリはスペースではなくコンマで区切る必要があります。つまり、クエリはtestとabc 4に一致する必要がありますが、test、abc、および 4 を検索するクエリの上にあります。