возвращать определенные поля первыми в эластичном поиске

У меня есть приложение Rails с term => definitions, хранящимися в узлах Neo4j, и я хочу, чтобы мои пользователи выполняли поиск с использованием эластичного поиска. Мы обнаружили, что благодаря использованию они гораздо чаще хотят сначала найти название термина, прежде чем они захотят выполнить поиск по описанию. Но у меня возникли проблемы с поиском функции, которая сначала возвращает результаты для определенного поля, а не для других полей.

[
    {
      "id": 1,
      "data": {
        "name": "Foo",
        "description": "Something super awesome."
      }
    },
    {
      "id": 2,
      "data": {
        "name": "Bar",
        "description": "Something that depends on Foo"
      }
    }
]


search for "Foo"

Поскольку оба термина содержат слово Foo либо в имени, либо в описании, мое приложение возвращает данные как в алфавитном порядке, так и поскольку Bar в алфавитном порядке перед Foo, первым появляется Bar. Это может стать очень утомительным, когда мои пользователи ищут общий термин, используемый во многих других терминах.

Как мне вернуть результаты из поля имени, за которым следуют второстепенные результаты в описании?

У меня такое чувство, что это больше связано с neo4j, чем с эластичным поиском


person Ryan Snodgrass    schedule 05.02.2015    source источник
comment
Не могли бы вы дать нам представление о том, какие драгоценные камни вы используете и как все настраивается? Вы используете Elasticsearch напрямую или что-то вроде Searchkick?   -  person subvertallchris    schedule 06.02.2015


Ответы (1)


Это возможно путем добавления значения частоты терминов и полей в сопоставление типов. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/scoring-theory.html name ": {" type ":" string "," store ": true," norm ": {" enabled ": false}," index_options ": "документы"}

дайте мне знать любые вопросы.

person BasK    schedule 06.02.2015