2014-10-31 5 views
0

Я хочу использовать поиск hashtag в сочетании со стандартным поиском текста.Как сделать кумулятивный поиск массива в elasticsearch?

Вот вид запроса я хочу, чтобы быть в состоянии сделать:

«кожаные штаны #vintage #london»

Так в действительности я хотел сдирать #hashtaged элементы и поиск их по имени, в совокупности. Во-первых, я хочу, чтобы он определял приоритеты в точном совпадении с помощью строки поиска, а затем с теми, у которых были близкие совпадения + хэштеги, а затем, если не совпадать с строкой поиска, через хэш-теги.

Таким образом, предметы с Vintage и London будут размещены выше, чем у Vintage или London.

Вот мое отображение

{ 
    "title" : { 
    "type" : "string", 
    "analyzer" : "standard" 
    }, 
    "hashtags" : { 
    "properties" : { 
      "id" : "integer", 
      "name" : "string" 
     } 
    } 
} 

Так запрос я хочу сделать

"exact or near match string" + "optional cumulative array match (preferably with fuzzyness)" 

или по отношению к моему отображения

"near or exact match on 'title'" + "cumulative array match with fizzyness on hashtag.name" 

Я попытался нечеткий матч но получить слишком много результатов с недостаточной ясностью. Я пробовал простую simple_query_string, но он возвращает странные результаты и пробовал совпадение bool, но ничего не возвращаю, когда добавляю массив.

Любая помощь, которую любой может предложить, будет более чем признательна. Дайте мне знать, если вам нужна дополнительная информация или что-то еще? Большое спасибо заранее за ваше время, чтобы даже прочитать это.

ответ

0

Возможно, запрос «dis_max» может работать на вас. это позволяет делать множественные запросы и согласовывать результаты. Поэтому она делает первые запросы, где «hashtags =« vintage london », затем« hashtags = «vintage», а затем «hashtags =« london ». Вы также можете добавить групповые символы (*) в исследуемых данных, как «„лондоне *“Hashtags =»

{ 
"fields" : ["hashtags", "title"], 
"query" : { 
    "dis_max" : { 
     "tie_breaker" : 0, 

     "queries" : [ { 
       "wildcard" : { 
        "hashtags" : "vintage london" 
       } 
      }, { 
       "wildcard" : { 
        "hashtags" : "vintage" 
       } 
      }, { 
       "wildcard" : { 
        "hashtags" : "london" 
       } 
      } 
     ] 
    } 
}, 
"sort" : { 
    "_score" : "desc" 
} } 

 Смежные вопросы

  • Нет связанных вопросов^_^