Skip to content
bjornhun edited this page Dec 13, 2024 · 18 revisions

Backend for å administrere og populere Opensearch-index som brukes i søk på nav.no.

Eksponerer endepunkter for å indeksere innhold, hente ut alt innholdet for et team og hente ut enkeltinnhold for et team.

Merk at det i praksis er kun ett team (vårt eget) som indekserer innhold per i dag, men vi har lagt opp til at andre teams potensielt skal kunne indeksere innholdet sitt til vår søkeindeks.

Mapping til indeksen defineres av Content-klassen i et delt bibliotek. Ved deploy av appen opprettes indeksen dersom den ikke allerede eksisterer.

Felter i indeks

  • id: Iden til innholdet. I vårt tilfelle er dette samme id som i CMSet vårt. Id som sendes inn til api prefixes med teamnavn slik at forskjellige teams skal kunne bruke samme indeks uten at det blir id-kollisjoner.
  • teamOwnedBy: Team som eier innholdet.
  • href: Url til innholdet.
  • title: Tittel til innholdet.
  • ingress: Ingress til innholdet. HTML-tags og XP-macros filtreres ut.
  • text: Selve innholdsteksten. HTML-tags og XP-macros filtreres ut.
  • allText: Tittel, ingress og innholdstekst konkatenert. Brukes i søket for å sjekke om innhold inneholder søketermene spredt utover de ulike tekstfeltene.
  • type: Innholdstype (f.eks. situasjonsside, aktuelt, skjema osv.)
  • createdAt: Timestamp for når innhold ble opprettet.
  • lastUpdated: Timestamp for når innhold sist ble oppdatert.
  • sortByDate: Timestamp som skal brukes til sortering i søket. For nyheter er det createdAt, ellers er det lastUpdated.
  • audience: Mågruppe for innholdet.
  • language: Innholdets språk/målform.
  • fylke: Brukes dersom innholdet er lokalt for et fylke.
  • metatags: Brukes for å avgjøre hvilken fasett søketreffet skal sorteres i.
  • languageRefs: En liste av andre språk innholdet finnes på.

Hvert av tekstfeltene har tre subfelter - en, no og other. Dersom innholdet er på engelsk, populeres en-feltet. Dersom det er på norsk, populeres no. Ellers populeres other. I praksis er kun ett av disse feltene satt. Dette gjøres så man kan bruke forskjellige analyzersfor forskjellige språk, men likevel søke på tvers av ulike språk vha et wildcard-query.

Analyzers

Alt av analysis-config ligger i index-settings.json. Disse er i hovedsak tilpassede versjoner av innebygde analyzers. Alle fjerner soft hyphens og zero width space. Her er følgende analyzers konfigurert:

  • custom_norwegian_index
  • custom_norwegian_ngrams
    • Brukes ved indeksering av norske titler og ingresser (i et eget inner field)
    • Basert på innebygd norwegian analyzer, men med en ngram multiplexer
  • custom_norwegian_search
  • custom_english
  • custom_standard
    • Brukes i alle tekstfelter for indeksering og søk i et eget inner field som brukes til eksakte frasesøk
    • Basert på innebygd standard analyzer

Synonymer

Merk at synonym-filteret ligger sist i filter-pipelinen. Dette betyr at synonymer som konfigureres må være på samme form som de ville vært om de var ferdig analysert. For eksempel: "betvil, bestrid" i stedet for "betvile, bestride". På denne måten blir "betvile", "betviler", "betvilende" synonymt med "bestride", "bestrider", "bestridende" osv. uavhengig av ordendelser. Man kan brukes dev tools console for å finne riktig analysert versjon av et ord.

Clone this wiki locally