Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Demande configuration recherche WalOnMap #941

Open
vbombaerts opened this issue Nov 14, 2024 · 1 comment
Open

Demande configuration recherche WalOnMap #941

vbombaerts opened this issue Nov 14, 2024 · 1 comment

Comments

@vbombaerts
Copy link

vbombaerts commented Nov 14, 2024

Dans la nouvelle version de WalOnMap, il y aura un outil de recherche libre (adresse, cadastre, route régionale et metawal) : https://geoservices.test.wallonie.be/geoviewer-api/viewers/5.0/index.html.

Sur base d’une chaîne de carcatères, il faudrait que MW retourne les fiches de MD pour lesquelles il y aurait une correspondance dans le titre, résumé, tag, mduuid… et infrasig_WalOnMap:true avec éventuellement un tri sur base de la pertinence.
Dans cet outil de recherche libre, il n’y aura pas de regroupement par thème et sous-thème.

On applique la même logique que l’outil de recherche de MW

@fxprunayre
Copy link

Exemple de requête à faire en POST (avec header accept: application/json) sur le endpoint https://metawal.wallonie.be/geonetwork/srv/api/search/records/_search de l'API metawal

{
  "from": 0,
  "size": 30,
  "sort": [
    "_score"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "isTemplate": [
              "n"
            ]
          }
        },
        {
          "term": {
            "infrasig_WalOnMap": {
              "value": "true"
            }
          }
        }
      ]
    }
  },
  "_source": {
    "includes": [
      "uuid",
      "resourceTitle*",
      "resourceAbstract*",
      "link"
    ]
  }
}

includes permet de sélectionner les champs dont vous avez besoin pour l'affichage.

Ensuite pour la recherche, il y a différentes approches possible mais dans query.bool.must, on peut ajouter un filtre sur le titre de cette façon:

{
          "query_string": {
            "query": "resourceTitleObject.langfre:(walous)",
            "default_operator": "AND"
          }
        }

La recherche full text dans metawal utilise:

{
    "query": "(any.langfre:(walous) OR any.common:(walous) OR resourceTitleObject.langfre:(walous)^2 OR resourceTitleObject.\\*:\"walous\"^6)",
    "default_operator": "AND"
}

any.langfre et any.common contiennent les informations des champs principaux de la fiche (titre, résumé, uuid, mot clé ...). Ensuite ^2 est utilisé pour donner plus de score aux mots recherchés ayant des correspondances dans le titre.

Ensuite, pour le tri, il est possible de trier sur certains champs ou de définir un façon de calculer la pertinence. Metawal fait la requête suivante avec function_score qui permet de booster les séries, non obsolète avec les plus récentes d'abord - La requête dans le géoportail n'a peut être pas besoin de cette logique.

{
  "from": 0,
  "size": 30,
  "sort": [
    "_score"
  ],
  "query": {
    "function_score": {
      "boost": "5",
      "functions": [
        {
          "filter": {
            "match": {
              "resourceType": "series"
            }
          },
          "weight": 1.5
        },
        {
          "filter": {
            "exists": {
              "field": "parentUuid"
            }
          },
          "weight": 0.3
        },
        {
          "filter": {
            "match": {
              "cl_status.key": "obsolete"
            }
          },
          "weight": 0.2
        },
        {
          "filter": {
            "match": {
              "cl_status.key": "superseded"
            }
          },
          "weight": 0.3
        },
        {
          "gauss": {
            "changeDate": {
              "scale": "365d",
              "offset": "90d",
              "decay": 0.5
            }
          }
        }
      ],
      "score_mode": "multiply",
      "query": {
        "bool": {
          "must": [
            {
              "terms": {
                "isTemplate": [
                  "n"
                ]
              }
            },
            {
              "term": {
                "infrasig_WalOnMap": {
                  "value": "true"
                }
              }
            }
          ]
        }
      }
    }
  },
  "_source": {
    "includes": [
      "uuid",
      "resourceTitle*",
      "resourceAbstract*",
      "link"
    ]
  },
  "script_fields": {
    "overview": {
      "script": {
        "source": "return params['_source'].overview == null ? [] : params['_source'].overview.stream().findFirst().orElse([]);"
      }
    }
  }
}

Cette requête contient également un script_fields qui permet de retourner l'imagette de la fiche dans la réponse si besoin.

Ensuite pour l'ajout à la carte, il faut sans doute un lien vers le service REST correspondant. Cette information est disponible dans hits.hits[*]._source.link

 {
              "protocol": "ESRI:REST",
              "mimeType": "",
              "urlObject": {
                "default": "https://geoservices.wallonie.be/arcgis/rest/services/SOL_SOUS_SOL/WAL_OCS_IA__2019/MapServer",
                "langfre": "https://geoservices.wallonie.be/arcgis/rest/services/SOL_SOUS_SOL/WAL_OCS_IA__2019/MapServer"
              },
              "nameObject": {
                "default": "Service de visualisation ESRI-REST",
                "langfre": "Service de visualisation ESRI-REST"
              },
              "descriptionObject": {
                "default": "Adresse de connexion au service de visualisation ESRI-REST de la couche de données \"Occupation du sol en Wallonie - WALOUS 2019\"",
                "langfre": "Adresse de connexion au service de visualisation ESRI-REST de la couche de données \"Occupation du sol en Wallonie - WALOUS 2019\""
              },
              "function": "browsing",
              "applicationProfile": "",
              "group": 0
            },

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants