2014-10-23 2 views
0

у меня есть это простое отображение:Результаты поиска упорядоченные по длине поисковых текста Длина/матч

PUT testindex 
{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "ngram_analyzer": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": ["lowercase", "edgeNGram"] 
       } 
      }, 
      "filter" : { 
       "ngram" : { 
        "type": "edgeNGram", 
        "min_gram": 2, 
        "max_gram": 15 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "test": { 
      "properties": { 
       "name": { 
        "type": "string", 
        "analyzer" : "ngram_analyzer" 
       } 
      } 
     } 
    } 
} 

С этими значениями:

PUT testindex/test/1 
{"name" : "Power"} 
PUT testindex/test/2 
{"name" : "Pow"} 
PUT testindex/test/3 
{"name" : "PowerMax"} 
PUT testindex/test/4 
{"name" : "PowerRangers"} 

И искали это:

GET testindex/test/_search 
{ 
    "query": { 
     "match": { 
      "name": "Po" 
     } 
    } 
} 

И получено:

PowerRangers 
Power 
Pow 
PowerMax 

Все с тем же счетом 0.2876821

Очевидно, ближайший результат к «Po» является «Pow», и что я ожидаю получить первый; но я этого не делаю.

Как мне изменить свое сопоставление, чтобы вести себя по этой логике?

+2

Вы еще что-нибудь пробовали? У вас есть сопоставление, которое вы можете использовать? Ваш вопрос слишком широк, имо. –

+0

Обновлено сообщение – user574645

ответ

0

Я думаю, что сортировка по сценарию - это решение, но оно связано с недостатком снижения производительности. См. here подробнее об этом. И вы можете использовать этот запрос:

GET testindex/test/_search 
{ 
    "query": { 
    "match": { 
     "name": "Po" 
    } 
    }, 
    "sort": { 
    "_script": { 
     "script": "_source['name'].value.length", 
     "type": "number", 
     "order": "asc" 
    } 
    } 
} 
Смежные вопросы