App Search returns zero results for queries with short terms after 8.4.2 update

After updating from Enterprise Search 8.4.1 to 8.4.2, queries with one or more short terms (one or two characters) return zero results. As this is new behavior from 8.4.2, I presume it's a bug?

Reindexing did not remediate the issue, but perhaps there's another workaround?

Edit: It's not just one and two letter words that make the query return zero results. In my dev environment, any query containing "norge" returns zero results while "jernbane" works fine, while in the test env "jernbane" works fine and "norge" returns zero. The app search and engine configuration is identical.

Tried to downgrade enterprise search to 8.4.1, which did not fix the issue, so I suspect it's an Elasticsearch bug/regression in 8.4.2.

Hey @leovalen , thanks for raising this, and sorry you're having an issue.

I'm struggling to reproduce - can you provide a document and a query that worked for 8.4.1 but is not working in 8.4.2?

Hi @Sean_Story, thanks for your reply. Queries containing common Norwegian conjunctions such as "av", "og" and "i" return zero results.

Eg the query gjennomføring av byutvikling should return the following document, but instead returns zero results:

[
  {
    "id": "15465",
    "type": "Evaluering",
    "title": "Grunneiersamarbeid for gjennomføring av byutvikling",
    "url": "https://kudos-core.test/dokument/grunneiersamarbeid-for-gjennomforing-av-byutvikling-2",
    "thumbnail": "https://kudos-core.test/thumbnails/994/994d81243e7a7d989f9b541eed5c92cbb2a14441a67c0ec1dbd5598a2a283066_thumbnail_512.jpg",
    "abstract": "Rapporten analyserer konkrete grunneiersamarbeid som er etablert for å realisere en utvikling og en arealbruksendring som er ønsket fra kommunens side – dvs. som er nedfelt i vedtatte kommunale arealplaner. Rapporten viser konkrete samarbeidsmodeller og diskuterer en rekke detaljer mht. initiativ, prosess, samarbeidsformer, hvordan aktørene velger å fordele rettigheter og plikter dem imellom, samt formalisering av samarbeid, hvordan eiendommene verdsettes og verdiøkning håndteres.",
    "plaintext": "Berit Nordahl\nprosjektleder\n\n1\n\n\fInnhold\nFORORD  1\nEMNEORD: .. 3\nSAMMENDRAG . 4\nSUMMARY  6\n1 GRUNNEIERSAMARBEID FOR GJENNOMFØRING AV BYUTVIKLING  8\nGRUNNEIERSAMARBEID – EN HJELP TIL Å FÅ FORTGANG I FORTETTING OG\nTRANSFORMASJONSPROSESSER 8\nEIENDOMMENES VERDI NÅ OG I FRAMTIDEN .. 9\nFRAMGANGSMÅTE OG RAPPORTENS OPPBYGGING . 10\n2\n\nDEFINISJONER, FRAMGANGSMÅTE OG TREKK VED DATAMATERIALET.. 12\n\nDEFINISJONER . 12\nDATAMATERIALET . 13\n3 PLANLEGGING SOM VISJONSBYGGING OG PLANLEGGING SOM FORDELING AV\nPLIKTER OG RETTIGHETER . 16\nVISJONER OG MULIGHETSROM VERSUS RETTIGHETER .. 16\nREKKEFØLGEBESTEMMELSER – PLIKTER SOM FØLGER RETTIGHETER  17\nVISJON MED ØKONOMISK REALISME .. 19\nPROSESSEN – KOMMUNENS ROLLE  19\n4\n\nGRUNNEIERSAMARBEDETS RETTSLIGE RAMMER - PROFESJONALITET OG TILLIT 20\n\nNÆRMERE OM VERDSETTINGSPRINSIPPER OG VERDIØKNING:  21\nHVOR LANGT INN I UTVIKLINGSPROSESSEN  22\nNÆRMERE OM PROSJEKTGJENNOMFØRINGEN – TILTAK FOR Å STYRKE GRUNNEIERSAMARBEIDET  25\n5\n\nOPPSUMMERING OG ANBEFALINGER . 29\n\nOPPSUMMERING . 29\nANBEFALINGER .. 30\nREFERANSER . 35\nVEDLEGG - CASEGJENNOMGANG . 36\n\n2\n\n\fEMNEORD:\nKnutepunktsfortetting\nOmrådeutvikling\nUtbyggere\nGrunneiere\nPlan og bygningsloven\nTillit\nGratispassasjer\n\n3\n\n\fSAMMENDRAG\nBakgrunnen for denne rapporten er utfordringer knyttet til kraftig knutepunktsforetting og\nkvartalsomdanning. For å nå FNs klimamål har vekst gjennom fortetting vært på den politiske\nagendaen i mer enn to tiår. Å gjennomføre planer om fortetting og transformasjon viser seg å være\nen utfordrende oppgave for kommunene, spesielt dersom områdene som skal omdannes er eid av\nmange ulike grunneiere og har tomter som er festet bort eller leietakere med lange kontrakter. Det\nkan være fristende for kommunene å avvente at eier-konstellasjonen i området endrer seg og et\nstørre utbyggingsforetak kjøper opp en eller flere eiendommer i området og driver prosessen\nframover. En alternativ strategi er at grunneierne i området selv etablerer et samarbeid med tanke\npå å komme i gang med en utbygging.\nDenne rapporten analyserer konkrete grunneiersamarbeid som er etablert for å realisere en\nutvikling og en arealbruksendring som er ønsket fra kommunens side – dvs. som er nedfelt i\nvedtatte kommunale arealplaner. Rapporten viser konkrete samarbeidsmodeller og diskuterer en\nrekke detaljer mht. initiativ, prosess, samarbeidsformer, hvordan aktørene velger å fordele\nrettigheter og plikter dem imellom, samt formalisering av samarbeid, hvordan eiendommene\nverdsettes og verdiøkning håndteres.\nEn forenklet tidslinje for eiendomsutviklingsprosessen kan deles inn i tre faser. Første fase er når\ninteressen for utvikling tar form. Ofte er dette initiert og inspirert av kommunens visjoner for området\nslik dette er gjengitt i overordnede arealplaner, og slik det er konkretisert i mulighetsstudier og ulike\ntyper analyser av området og omgivelsene rundt. Andre fase er utviklingsfasen: da har grunneier\nbesluttet å utvikle og går i dialog med kommunen om rammer og betingelser med tanke på å lage\nen reguleringsplan for området. Fasen avsluttes med vedtatt juridisk bindende regulering for\nområdet. Tredje og siste fase er selve byggefasen med rammesøknad, forhåndssalg, prosjektering,\nbygging, ferdigstilling og sluttføring av salgene. Det skjer en betydelig verdiøkning i arealene\nallerede i fase 1, selv om den er latent og beheftet med stor usikkerhet. I fase to konkretiseres\nrammene for utviklingen og usikkerhet om framdrift og betingelser avklares og verdien på arealene\nøkes betraktelig nettopp fordi usikkerheten om den framtidige høyere og bedre utnyttingen er\nredusert. Grunneiersamarbeid er en mulighet for grunneier til å ta del i verdistigningen i alle tre\nfasene. Men som rapporten velger de fleste grunneiersamarbeidene å selge til en profesjonell\nutbygger etter endt fase 2. Gjennomgangen viser også at e viktig oppgave for\ngrunneiersamarbeider er å regulere den enkeltes plikter og rettigheter, spesielt med hensyn til når\nden enkelte kan «hoppe av» prosessen.\nRapporten er delt i 5 deler og et vedlegg: Del1 1 trekker opp rammene for grunneiersamarbeid og\nprinsipielle aspekter ved samarbeidene som er studert\nDel 2 gir en kort gjennomgang av definisjoner, framgangsmåte og trekk ved datamaterialet. 8\ngrunneiersamarbeider er presentert.",
    "isbn": "9788283092943",
    "authors": [
      "Berit Irene Nordahl",
      "Jan Willy Føreland",
      "Marit Ekne Ruud"
    ],
    "actors": [
      "Kommunal- og moderniseringsdepartementet",
      "NIBR"
    ],
    "publication_year": "2020",
    "published_at": "2020-01-13T08:29:18.000000Z",
    "time_decay": "0.9040232192659343",
    "analysis_criteria": [
      "treffsikkerhet",
      "Konsekvens"
    ],
    "instrument": [
      "samarbeid"
    ],
    "topic": [
      "byutvikling"
    ]
  }
]

(I've truncated the plaintext field, but it appears to be the query words and not the document content that trigger the apparent bug).

Perhaps it's something specific to the engine/results/tuning configuration, in which case I can post the details.

@leovalen thanks, this is helpful.

I'm still not reproducing.

Some follow-up questions then:

  1. What language did you select for your engine (I tested with Universal)
  2. What do you have set for Relevance Tuning? (I am using the default)
  3. Do you have any weights, boosts, or search fields specified in your query or set by default for your engine?
  1. Universal
  2. 4
  3. Yes, and one of them seems to be triggering the error.

I did some troubleshooting with the Search Explain API, which returns the following query for gjennomføring av byutvikling:

{
  "query": {
    "bool": {
      "must": {
        "function_score": {
          "boost_mode": "sum",
          "score_mode": "sum",
          "query": {
            "bool": {
              "must": [
                {
                  "bool": {
                    "should": [
                      {
                        "multi_match": {
                          "query": "gjennomføring av byutvikling",
                          "minimum_should_match": "3<-1 3<75%",
                          "type": "cross_fields",
                          "fields": [
                            "plaintext^1.0",
                            "plaintext.stem^0.95",
                            "plaintext.prefix^0.1",
                            "plaintext.joined^0.75",
                            "plaintext.delimiter^0.4",
                            "abstract^2.0",
                            "abstract.stem^1.9",
                            "abstract.prefix^0.2",
                            "abstract.joined^1.5",
                            "abstract.delimiter^0.8",
                            "title^5.0",
                            "title.stem^4.75",
                            "title.prefix^0.5",
                            "title.joined^3.75",
                            "title.delimiter^2.0",
                            "actors^2.0",
                            "actors.stem^1.9",
                            "actors.prefix^0.2",
                            "actors.joined^1.5",
                            "actors.delimiter^0.8",
                            "publication_year^3.5",
                            "publication_year.stem^3.325",
                            "publication_year.prefix^0.35",
                            "publication_year.joined^2.625",
                            "publication_year.delimiter^1.4",
                            "subtitle^2.0",
                            "subtitle.stem^1.9",
                            "subtitle.prefix^0.2",
                            "subtitle.joined^1.5",
                            "subtitle.delimiter^0.8",
                            "topic^3.0",
                            "topic.stem^2.85",
                            "topic.prefix^0.3",
                            "topic.joined^2.25",
                            "topic.delimiter^1.2",
                            "authors^2.0",
                            "authors.stem^1.9",
                            "authors.prefix^0.2",
                            "authors.joined^1.5",
                            "authors.delimiter^0.8",
                            "id^1.0"
                          ]
                        }
                      },
                      {
                        "multi_match": {
                          "query": "gjennomføring av byutvikling",
                          "minimum_should_match": "3<-1 3<75%",
                          "type": "best_fields",
                          "fuzziness": "AUTO",
                          "prefix_length": 2,
                          "fields": [
                            "plaintext.stem^0.1",
                            "abstract.stem^0.2",
                            "title.stem^0.5",
                            "actors.stem^0.2",
                            "publication_year.stem^0.35",
                            "subtitle.stem^0.2",
                            "topic.stem^0.3",
                            "authors.stem^0.2"
                          ]
                        }
                      }
                    ]
                  }
                }
              ],
              "should": [
                {
                  "multi_match": {
                    "query": "gjennomføring av byutvikling",
                    "type": "phrase",
                    "boost": 9,
                    "slop": 0,
                    "fields": [
                      "plaintext.stem^0.95",
                      "abstract.stem^1.9",
                      "title.stem^4.75",
                      "actors.stem^1.9",
                      "publication_year.stem^3.325",
                      "subtitle.stem^1.9",
                      "topic.stem^2.85",
                      "authors.stem^1.9",
                      "id^1.0"
                    ]
                  }
                }
              ]
            }
          },
          "functions": [
            {
              "script_score": {
                "script": {
                  "source": "Math.max(_score * ((3.0 * (doc.containsKey(\"time_decay.float\") && !doc[\"time_decay.float\"].empty ? doc[\"time_decay.float\"].value : 1))) - _score, 0)"
                }
              }
            }
          ]
        }
      }
    }
  },
  "sort": [
    {
      "_score": "desc"
    },
    {
      "_doc": "desc"
    }
  ],
  "highlight": {
    "fragment_size": 300,
    "type": "plain",
    "number_of_fragments": 1,
    "order": "score",
    "encoder": "html",
    "require_field_match": false,
    "fields": {
      "plaintext.stem": {
        "fragment_size": 150
      },
      "plaintext.prefix": {
        "fragment_size": 150
      }
    },
    "highlight_query": {
      "multi_match": {
        "query": "gjennomføring av byutvikling",
        "fields": [
          "plaintext.stem",
          "plaintext.prefix"
        ]
      }
    }
  },
  "size": 10,
  "from": 0,
  "timeout": "30000ms",
  "_source": [
    "title",
    "plaintext",
    "id"
  ]
}

Which again returns the following error from the Elasticsearch search API for App Search endpoint:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "totalTermFreq must be at least docFreq, totalTermFreq: 2688, docFreq: 2692"
      },
      {
        "type": "illegal_argument_exception",
        "reason": "totalTermFreq must be at least docFreq, totalTermFreq: 1589, docFreq: 1593"
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": ".ent-search-engine-documents-kudos-development",
        "node": "5rlj7jwNRcOVNuIURqPYzw",
        "reason": {
          "type": "illegal_argument_exception",
          "reason": "totalTermFreq must be at least docFreq, totalTermFreq: 2688, docFreq: 2692"
        }
      },
      {
        "shard": 1,
        "index": ".ent-search-engine-documents-kudos-development",
        "node": "5rlj7jwNRcOVNuIURqPYzw",
        "reason": {
          "type": "illegal_argument_exception",
          "reason": "totalTermFreq must be at least docFreq, totalTermFreq: 1589, docFreq: 1593"
        }
      }
    ],
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "totalTermFreq must be at least docFreq, totalTermFreq: 2688, docFreq: 2692",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "totalTermFreq must be at least docFreq, totalTermFreq: 2688, docFreq: 2692"
      }
    }
  },
  "status": 400
}

This seems to be the issue - “totalTermFreq must be at least docFreq” error after upgrading to 8.4.2 · Issue #90275 · elastic/elasticsearch · GitHub
Going to be fixed in 8.4.3 according to the thread :slight_smile:

Temporary workaround is to reindex in a previous version of Elasticsearch (8.4.1 or earlier).