Elasticsearch match_phrase игнорирует порядок ключевых слов (применяется Stemmer) - PullRequest
0 голосов
/ 12 февраля 2020

Мы проиндексировали наши данные, используя Engli sh stemmer и фильтр стоп-слов (ES 7.5). Поиск по слову «строительство моста» с помощью match_phrase возвращает только 5 результатов.

GET /tenderinfostem/_search
{
  "query": {
    "bool" : {
      "must" : {
        "match_phrase": {
          "workdesc": {
                "query": "bridge Construction",
                "slop":  1
          }
        }  
      },
     "filter" : {
        "range": {
            "submdate": {
                "gte": "now-100d"
            }
        }
      }

    }
  }
}

При поиске с помощью «Строительство моста» возвращается 65 результатов.

GET /tenderinfostem/_search
{
  "query": {
    "bool" : {
      "must" : {
        "match_phrase": {
          "workdesc": {
                "query": "Construction of bridge",
                "slop":  1
          }
        }  
      },
     "filter" : {
        "range": {
            "submdate": {
                "gte": "now-100d"
            }
        }
      }

    }
  }
}

Для нас »строительство моста "и" строительство моста "должны дать равные результаты.

Я пытался решить с помощью span_near запроса следующим образом. Но он не возвращает результата, поскольку span_term ищет точное совпадение, но, хотя мы стеблим наши данные во время индексации, используя stemmer, это не работает.

POST tenderinfostem/_search
{
  "query":{  
      "bool":{  
         "must":[  
            {  
               "span_near" : {
            "clauses" : [
                { "span_term": { "workdesc": "bridge" } },
                { "span_term": { "workdesc": "construction" } }
            ],
            "slop" : 1,                                 
            "in_order" : false                           
        }
            }
         ],
     "filter" : {
        "range": {
            "submdate": {
                "gte": "now-100d"
            }
          }
        }
      }
   }
}

Как мы можем решить это?

...