Мы проиндексировали наши данные, используя 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"
}
}
}
}
}
}
Как мы можем решить это?