elasticsearch синонимен анализ на токенизирани ключови думи с много думи

Опитвам се да накарам многословни синоними да работят с _analyze API. API връща очаквани резултати за синоними от една дума, но не и за такива от много думи. Ето моите настройки и верига за анализ:

curl -XPOST "http://localhost:9200/test" -d'
{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "my_syn_filt": {
            "type": "synonym",
            "synonyms": [
              "foo bar, fooo bar", 
              "bazzz, baz"
            ]
          }
        },
        "analyzer": {
          "my_synonyms": {
            "filter": [
              "lowercase",
              "my_syn_filt"
            ],
            "tokenizer": "keyword"
          }
        }
      }
    }
  }
}'

Сега тествайте с помощта на _analyze API:

curl 'localhost:9200/test/_analyze?analyzer=my_synonyms&text=baz'

Обаждането връща това, което очаквам (същият резултат се връща и за „bazzz“):

{
  "tokens": [
    {
      "position": 1,
      "type": "SYNONYM",
      "end_offset": 3,
      "start_offset": 0,
      "token": "bazzz"
    },
    {
      "position": 1,
      "type": "SYNONYM",
      "end_offset": 3,
      "start_offset": 0,
      "token": "baz"
    }
  ]
}

Сега, когато опитам същото извикване с многословен синонимен текст, приложният програмен интерфейс (API) връща само един токен от тип „дума“, без синоними:

curl 'localhost:9200/test/_analyze?analyzer=my_synonyms&text=foo+bar'

(се завръща)

{
  "tokens": [
    {
      "position": 1,
      "type": "word",
      "end_offset": 7,
      "start_offset": 0,
      "token": "foo bar"
    }
  ]
}

Защо приложният програмен интерфейс (API) за анализ не връща токени „foo bar“ И „fooo bar“ с тип SYNONYM?


person Jeff    schedule 08.08.2014    source източник


Отговори (1)


Ключ-стойността "tokenizer":"keyword" СЪЩО трябва да се добави към декларацията на филтъра my_syn_filt, както следва:

curl -XPOST "http://localhost:9200/test" -d'
{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "my_syn_filt": {
            "tokenizer": "keyword",
            "type": "synonym",
            "synonyms": [
              "foo bar, fooo bar", 
              "bazzz, baz"
            ]
          }
        },
        "analyzer": {
          "my_synonyms": {
            "filter": [
              "lowercase",
              "my_syn_filt"
            ],
            "tokenizer": "keyword"
          }
        }
      }
    }
  }
}'

С горното картографиране _analyze API връща желаните SYNONYM токени:

{
  "tokens": [
    {
      "position": 1,
      "type": "SYNONYM",
      "end_offset": 7,
      "start_offset": 0,
      "token": "foo bar"
    },
    {
      "position": 1,
      "type": "SYNONYM",
      "end_offset": 7,
      "start_offset": 0,
      "token": "fooo bar"
    }
  ]
}
person Jeff    schedule 13.08.2014
comment
Кой това ми отне известно време. наздраве! Вероятно ще използвам филтър за малки букви там, докато съм там - person haltabush; 21.04.2016
comment
Защо персонализираният филтър може да посочи токенизатор? Има ли документи, на които да се обърнете? - person Folyd; 20.05.2016
comment
Също така не можах да намеря никакъв документ :? - person haltabush; 14.12.2016