thesaurus-linguae-aegyptiae / tla-es

Thesaurus Linguae Aegyptiae Spring backend for Elasticsearch access
1 stars 4 forks source link

Suche in translation filtert stopwords raus #28

Closed dwerning closed 2 years ago

dwerning commented 2 years ago

Befund

Interessanterweise passiert ähnliches beim Feld Bibliographie nicht, obwohl der Query-String in ES Query identisch aufgebaut ist. => Wo ist diese stopword-Behandlung ein/ausgestellt?

      {
        "match" : {
          "passport.bibliography.bibliographical_text_field" : {
            "query" : "Wb ist",
            "operator" : "AND",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : true,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : true,
            "boost" : 1.0
          }
        }
      },
      {
        "match" : {
          "translations.de" : {
            "query" : " gut Eigenschaft ist",
            "operator" : "AND",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : true,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : true,
            "boost" : 1.0
          }
        }
      },
dwerning commented 2 years ago

Kann man die Liste von stop words anpassen oder muss man sie ganz raus nehmen?

dwerning commented 2 years ago

'Schuld' scheint die Einstellung analyzer="german" zu sein in https://github.com/thesaurus-linguae-aegyptiae/tla-es/blob/a3e46f54ef80011c64acde3f84ecb3509548b38a/src/main/java/tla/backend/es/model/parts/Translations.java#L30

Lösung Definition eines custom analyzers in neuem /elasticsearch/settings/indices/translation.json als

{
  "settings": {  ###???###
    "analysis": {
      "filter": {
        "german_stop": {
          "type":       "stop",
          "stopwords":  "" 
        },
        "german_stemmer": {
          "type":       "stemmer",
          "language":   "german"
        }
      },
      "analyzer": {
        "german_without_stopwords": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "german_stop",
            "german_stemmer"
          ]
        }
      }
    }
  }
}

und dann

@Setting(settingPath = "/elasticsearch/settings/indices/translation.json")
public class Translations {

    @Field(type = FieldType.Text, analyzer = "german_without_stopwords")
    private List<String> de;

funktioniert nicht, da der analyzer "german_without_translation" so noch nicht nicht bekannt/gemappt ist.