ElasticSearch DSL: запрос и по настраиваемым тегам - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в ES, но у меня уже есть базовый c запрос, который мне нужно расширить. Запрос в настоящее время выполняет поиск, основанный на ключевых словах, а также на географическом расстоянии.

Теперь я добавил настраиваемый тег в свой индекс и sh тоже должен это учитывать. Я использую sh для фильтрации и оценки моих результатов на основе тегов imageTags (тег + оценка)!

PS: Я видел другие похожие сообщения, но не могу понять, как адаптировать свой запрос (нет из моих попыток работают).

Вот мой запрос:

GET /posts_index/_search
{
    "track_total_hits": true,
    "from":0,
    "size":10,
    "_source": [
        "id",
        "tags",
        "taxonomies",
        "storesNames",
        "geoLocations",
        "storesIds",
        "imageUri"
    ],
    
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "should": [
                        {
                            "distance_feature": {
                                "field": "geoLocations",
                                "pivot": "10km",
                                "origin": [
                                    -71.3,
                                    41.15
                                ]
                            }
                        },
                        {
                            "distance_feature": {
                                "field": "creationTime",
                                "pivot": "14d",
                                "origin": "now"
                            }
                        },
                        {
                            "query_string": {
                                "fields": [
                                    "tags^3",
                                    "taxonomies^5"
                                ],
                                "query": "",
                                "fuzziness": "auto"
                            }
                        },
                    ]
            
                }
            },
            "functions": [
                {
                    "script_score": {
                        "script": {
                            "source": "Math.sqrt(doc['commentsCount'].value)"
                        }
                    }
                },
                {
                    "script_score": {
                        "script": {
                            "source": "Math.log(2 + doc['likesCount'].value)"
                        }
                    }
                },
                {
                    "script_score": {
                        "script": {
                            "source": "Math.log(2 + doc['viewsCount'].value)"
                        }
                    }
                }
            ],
            "score_mode": "avg"
        }
    }
}

Вот одна из моих попыток изменить его:

{
  "query": {
    "nested": {
      "path": "imageTags",
      "score_mode": "sum",
      "query": {
        "function_score": {
              "query": {
                  "match": {
                      "imageTags.tag.keyword": "tripod"
                  }
              },
              "field_value_factor": {
                  "field": "imageTags.score",
                  "factor": 1,
                  "missing": 0
              }
          }
      }
    }
  }             
}

Например, вот и пример индекса:

{
  "id": "4a9afd93-62bc-e8b2-29b4-39f5b073336d",
  "tags": [
    "fashion",
    "mode",
    "summer"
  ],
  "imageTags": [
    {
      "score": 0.95150965,
      "tag": "four-poster"
    },
    {
      "score": 0.014835004,
      "tag": "window"
    },
    {
      "score": 0.014835004,
      "tag": "shade"
    },
    {
      "score": 0.009375425,
      "tag": "sliding"
    },
    {
      "score": 0.009375425,
      "tag": "door"
    }
  ],
  "taxonomies": [],
  "categories": [],
  "qualityScore": 0.0,
  "geoLocations": [
    {
      "lat": 50.4651156,
      "lon": 4.865208
    }
  ],
  "storesIds": [
    "ba9b3f59-50aa-8774-11a7-39f5ad58ae1a"
  ],
  "storesNames": [
    "Zara Namur"
  ],
  "creationTime": "2020-06-10T12:48:30.5710000Z",
  "updateTime": "2020-06-10T12:48:30.5710000Z",
  "imageUri": "https://localhost:44359/cdn/e_76372856-f7a0-49cc-d3d9-39f5ad58ad6d/653d147084637b2af68b39f5b0733359.jpg",
  "description": "",
  "likesCount": 0,
  "viewsCount": 0,
  "commentsCount": 0,
  "ImageTags": [
    {
      "score": 0.95150965,
      "tag": "four-poster"
    },
    {
      "score": 0.014835004,
      "tag": "window"
    },
    {
      "score": 0.014835004,
      "tag": "shade"
    },
    {
      "score": 0.009375425,
      "tag": "sliding"
    },
    {
      "score": 0.009375425,
      "tag": "door"
    }
  ]
}
...