quickwit-oss / tantivy

Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust
MIT License
12.07k stars 670 forks source link

Correct way of quering against "title" and "body" #554

Open kkonevets opened 5 years ago

kkonevets commented 5 years ago

I want to query something like Michael Jackson and search in two fields: title and body. I do it this way:

 let query_parser = QueryParser::for_index(&index, vec![title, body]);

But the results are not relevant at all. Seems like tantivy searches only Michael or Jackson and sometimes both. I expect that documents with title containing Michael Jackson would be on the first line, but they are placed on say 5-th.

Then I concatenate title and body with space in one field - body. So I query like this:

 let query_parser = QueryParser::for_index(&index, vec![body]);

And now the results are relevant - all docs with Michael Jackson in title are placed on the first lines. Do I misunderstand something or is it a bug?

kkonevets commented 5 years ago

I have found out that Michael Jackson was not in the body, only in title Sorry...

fulmicoton commented 5 years ago

@kkonevets

I expect that documents with title containing Michael Jackson would be on the first line, but they are placed on say 5-th.

This could still be a bug actually. Do you have a screenshot? or a json showing your top 10 docs?

kkonevets commented 5 years ago

Sure, I query Оксана Лифенко

top 10 when title and body are concatenated (in my case body is text):

[
    [
        20.307077,
        {
            "text": [
                "Мастер класс по вязанию крючком для кукол Паола Рейна \"Хозяйка Прерий\" (Оксана Лифенко) https://image.ibb.co/hiiMkz/38206.jpg\nPDF журнал по вязанию кукольного наряда.\nПредназначен для кукол подружки Паола Рейна 32 см (Paola Reina), но может подойти и другим куклам с аналогичными размерами.\nhttp://shop.kasatkadolls.ru/order/prairies/new08"
            ],
            "title": [
                "Мастер класс по вязанию крючком для кукол Паола Рейна \"Хозяйка Прерий\" (Оксана Лифенко)"
            ]
        }
    ],
    [
        20.039974,
        {
            "text": [
                "PDF мастер класс \"Купальник Ромашки\" для кукол (Оксана Лифенко) https://i.ibb.co/hgyq7rh/x7jje7h EJv Q.jpg\nPDF журнал по вязанию купальника для кукол (10 страниц формата А4)\nОписание предназначено для кукол Galoob Baby Face, но может подойти и другим подобным куклам, например Disney Animators\nhttps://vk.com/market 95724412?w=product 95724412_7031"
            ],
            "title": [
                "PDF мастер класс \"Купальник Ромашки\" для кукол (Оксана Лифенко)"
            ]
        }
    ],
    [
        20.039974,
        {
            "text": [
                "PDF мастер класс \"Лесная сказка\" для кукол Paola Reina (32 34 см) (спицы) (Оксана Лифенко) https://shop.kasatkadolls.ru/upload/shop/goods/u208928/67018.jpg\n\nВходит:\n\n  свитер\n  сарафан\n  колготки\n  свитер с \"косами\"\n  шорты\n\nОписание в формате PDF, очень подробное, 100 фото, детальные схемы, а для колготок еще и виде мастер класса!\n\nhttps://vk.com/kasatkadolls"
            ],
            "title": [
                "PDF мастер класс \"Лесная сказка\" для кукол Paola Reina (32 34 см) (спицы) (Оксана Лифенко)"
            ]
        }
    ],
    [
        19.652239,
        {
            "text": [
                "PDF Мастер класс \"Снежный Ананас\"   кукольный наряд крючком (Оксана Лифенко) https://a.radikal.ru/a21/1905/ae/7172e77d7bbb.jpg\nPDF журнал по вязанию кукольного наряда. В описание входит платье, берет и туфельки (17 страниц формата А4, может быть напечатано на любом принтере).\nОписание предназначено для кукол Galoob Baby Face, но может подойти и другим подобным куклам.\nhttps://vk.com/market 95724412?w=product 95724412_7196"
            ],
            "title": [
                "PDF Мастер класс \"Снежный Ананас\"   кукольный наряд крючком (Оксана Лифенко)"
            ]
        }
    ],
    [
        19.526306,
        {
            "text": [
                "PDF мастер класс \"Сакура\" для кукол Galoob Baby Face (Оксана Лифенко) https://i.ibb.co/y00bNL4/jvx Vq9 Nqd Kk.jpg\nPDF журнал по вязанию платья, повязки на голову, трусиков и подъюбника, МК по вязанию с бисером. Описание состоит из 9 страниц формата А4 и может быть напечатано на любом принтере.\nОписание предназначено для кукол Galoob Baby Face, но может подойти и другим подобным куклам.\nhttps://vk.com/market 95724412?w=product 95724412_7133"
            ],
            "title": [
                "PDF мастер класс \"Сакура\" для кукол Galoob Baby Face (Оксана Лифенко)"
            ]
        }
    ],
    [
        19.038311,
        {
            "text": [
                "PDF и Видео Мастер Класс \"Кеды для куклы\" для кукол Paola Reina Паола Рейна(32 34cм)(Оксана Лифенко) PDF журнал и ВИДЕО урок по вязанию кед крючком.\n\nПредназначен для кукол подружки Паола Рейна 32 см (Paola Reina), но может подойти и другим куклам с аналогичными размерами.\nЖурнал содержит более 30 ти пошаговых фото и описание работы.\nДетальный видео урок.\n\n\nhttps://sun9 29.userapi.com/c845018/v845018656/194838/fSHAZhGvsv8.jpg\n\n\nhttps://vk.com/market 95724412?w=product 95724412_2940862"
            ],
            "title": [
                "PDF и Видео Мастер Класс \"Кеды для куклы\" для кукол Paola Reina Паола Рейна(32 34cм)(Оксана Лифенко)"
            ]
        }
    ],
    [
        19.038311,
        {
            "text": [
                "PDF Мастер класс \"Березка\" для кукол Paola Reina (Оксана Лифенко) https://i.ibb.co/N2zNtqM/gfu572 ZIq M0.jpg\nPDF журнал по вязанию кукольного наряда.\nВ описание входит платье, шляпка, трусики и сумочка.\nОписание продается в формате PDF, состоит из 20 страниц формата А4 и может быть напечатано на любом принтере.\nОписание составлено очень подробно, с пошаговыми фото, некоторые моменты проиллюстрированы и схематично (шляпка, пояс, кайма).\nhttps://vk.com/market 95724412?w=product 95724412_11422/query"
            ],
            "title": [
                "PDF Мастер класс \"Березка\" для кукол Paola Reina (Оксана Лифенко)"
            ]
        }
    ],
    [
        18.574118,
        {
            "text": [
                "PDF мастер класс \"Мисс Санта для Барби\" (Оксана Лифенко) https://i.ibb.co/9YcxQ0z/YWU0 IYkm XI.jpg\n\nPDF журнал по вязанию для кукол типа Барби. В описание входит платье, кофта и шапка, техника вязания крючком с бисером.\nОписание продается в формате PDF, состоит из 9 страниц формата А4 и может быть напечатано на любом принтере. После оплаты, я вышлю Вам описание на Ваш e mail (пожалуйста, указывайте при оплате). Если Вы желаете уже напечатанное описание, свяжитесь со мной.\nОписание предназначено для кукол Барби , но может подойти и другим подобным куклам.\nhttps://vk.com/market 95724412?w=product 95724412_7195"
            ],
            "title": [
                "PDF мастер класс \"Мисс Санта для Барби\" (Оксана Лифенко)"
            ]
        }
    ],
    [
        18.574118,
        {
            "text": [
                "PDF Мастер Класс \"Морячок\" (Оксана Лифенко) https://i.ibb.co/pzvHrDN/I3d U T6 Gg TM.jpg\nhttps://i.ibb.co/NFrb6v6/N0ls Z9nwjb U.jpg\nВ описание входит штаны, кофта, берет, матросский воротник. Описание продается в формате PDF, состоит из 12 страниц формата А4 и может быть напечатано на любом принтере.\nОписание предназначено для кукол BJD RealPuki от FairyLand, но может подойти и другим подобным куклам. Также вы можете вязать этот наряд из обычной пряжи, и он подойдет для куколок побольше.\nhttps://vk.com/market 95724412?w=product 95724412_2212"
            ],
            "title": [
                "PDF Мастер Класс \"Морячок\" (Оксана Лифенко)"
            ]
        }
    ],
    [
        18.350407,
        {
            "text": [
                "PDF мастер класс \"Баратцы\" (Оксана Лифенко) https://i.ibb.co/gm447GW/7f ZUzq IELa8.jpg\nPDF журнал для миниатюрного вязания. В описание входит платье, берет, трусики и гетры. Описание продается в формате PDF, состоит из 11 страниц формата А4 и может быть напечатано на любом принтере. После оплаты, я вышлю Вам описание на Ваш e mail (пожалуйста, указывайте при оплате).\nОписание предназначено для кукол BJD RealPuki от FairyLand (рост кукол 9,5 см), но может подойти и другим подобным куклам. Также вы можете связать этот наряд из обычной пряжи, и он подойдет для куколок побольше.\nhttps://vk.com/market 95724412?w=product 95724412_7150"
            ],
            "title": [
                "PDF мастер класс \"Баратцы\" (Оксана Лифенко)"
            ]
        }
    ]
]

top 10 when title and body are separate:

[
    [
        16.10081,
        {
            "text": [
                "Законы притяжения Оксана Кулакова]  \n\nТема: Сексуальное искусство, Женственность\nТип товара: Запись вебинара (аудио)\nПродолжительность: 1,5 часа\n\nСсылка на вебинар:\n  "
            ],
            "title": [
                "Законы притяжения   Оксана Кулакова"
            ]
        }
    ],
    [
        16.08742,
        {
            "text": [
                "http://i95.fastpic.ru/big/2017/0628/9a/615b9c8504d94a3893d7f496ac53539a.jpg \n\nОт издателя\nОксана Путан   профессиональный повар, автор кулинарных книг и известный кулинарный блогер. Ее рецепты отличаются практичностью, доступностью и пользуются огромной популярностью в русскоязычном интернете. Это третья книга автора о самом вкусном и ароматном   настоящих русских пирогах и выпечке!\nДаже новички на кухне легко готовят по ее рецептам. Оксана описывает процесс приготовления настолько подробно и понятно, что вам остается только наслаждаться готовкой и не тратить время на лишние усилия. Готовьте легко и просто!\n\nhttps://www.ozon.ru/context/detail/id/139872462/"
            ],
            "title": [
                "Любимые русские пироги (Оксана Путан)"
            ]
        }
    ],
    [
        15.343598,
        {
            "text": [
                "\nОксана Дмитриевна Минаева\nКурс «Организация частной логопедической практики. Подводные камни и перспективы собственного дела»\n\nПриглашаем детских специалистов на курс по открытию частной практики.\n\nКурс разбит на три части: законодательную, экономическую и рекламную.\n\nВ первой части ведущая пояснит нормативно правовые основы организации частной практики, расскажет о том, как оформить свое дело с юридической точки зрения.\n\nИз второй части вы узнаете о том, как построить бизнес план учреждения, снизить расходы и повысить прибыль.\n\nВ третьей части ведущая поделится способами привлечения клиентов и работы с ними.\n\nВ КУРСЕ\n \n\n\n3 лекции: 12 часов лекций и общения с ведущей\nматериалы для самостоятельной работы\nСертификат на 16 академических часов.\n\n \nО ВЕДУЩЕЙ\nОксана Минаева — директор центра образования и коррекции «Индиго» в Белгороде, дефектолог.\n\nПрофессиональная деятельность\nОксана Дмитриевна руководит Центром для детей с особенностями развития «Индиго» и Проектом «Формирование кадрового и методического ресурса начального образования детей с РАС в Белгородской области» от Департамента образования Белгородской области.\n\nОбразование и научная карьера\nОксана Дмитриевна — доцент кафедры психологии и дефектологии БелИРО. Также она была доцентом кафедры дошкольного и специального образования педагогического факультета и кафедры Общей патологии медицинского факультета БелГУ.\n\nРанее она была деканом педагогического факультета, зав кафедрой логопедии Белгородского государственного университета и научным сотрудником НИИ экспериментальной и клинической медицины Киргизской государственной медицинской академии.\n\n\nПродажник:https://mersibo.ru/webinars#w26422"
            ],
            "title": [
                "Организация частной логопедической практики. Подводные камни (Оксана Минаева)"
            ]
        }
    ],
    [
        14.974621,
        {
            "text": [
                "Сбалансированная практика хатха йоги, направленная на развитие силы и гибкости. В составе занятия Оксана предлагает разобрать упражнения и асаны, подводящие к балансам на руках, а также упражнения и асаны, ориентированные на подготовку мышц и суставов к шпагатной растяжке.\n\nНачало: 10.00 по московскому времени\nПродолжительность: 1 час 30 мин.\nУровень: продолжающие\n\nПротивопоказания: острый период заболеваний опорно двигательного аппарата; воспалительные процессы, структурный сколиоз, беременность.\nhttp://yantayoga.com/index/14102017OG"
            ],
            "title": [
                "Сила и гибкость (Оксана Горкина)"
            ]
        }
    ],
    [
        14.520521,
        {
            "text": [
                "https://i.ibb.co/gm447GW/7f ZUzq IELa8.jpg\nPDF журнал для миниатюрного вязания. В описание входит платье, берет, трусики и гетры. Описание продается в формате PDF, состоит из 11 страниц формата А4 и может быть напечатано на любом принтере. После оплаты, я вышлю Вам описание на Ваш e mail (пожалуйста, указывайте при оплате).\nОписание предназначено для кукол BJD RealPuki от FairyLand (рост кукол 9,5 см), но может подойти и другим подобным куклам. Также вы можете связать этот наряд из обычной пряжи, и он подойдет для куколок побольше.\nhttps://vk.com/market 95724412?w=product 95724412_7150"
            ],
            "title": [
                "PDF мастер класс \"Баратцы\" (Оксана Лифенко)"
            ]
        }
    ],
    [
        14.520521,
        {
            "text": [
                "https://image.ibb.co/bC8CQz/u_Tz_5iy_Sqgw.jpg\nhttps://image.ibb.co/gJmACe/4_XAN976_Rqiw.jpg\nhttps://image.ibb.co/fTOCQz/M_x5_S9_CC4_Qw.jpg\nПредлагаю вашему вниманию мастер класс по вязанию 3 х сумочек для кукол.\nВы свяжете рюкзачок, пляжную сумочку и сумочку \"горошки\" для своей любимой куклы (или на заказ).\nРюкзак и оранжевая сумочка отлично подойдут для кукол принцессы Диснея (Disney Animators) и фейсинок, а \"горошковая\" для любимых Паолочек. Также могут подойти и другим куклам с аналогичными размерами.\n16 страниц подробного, пошагового объяснения процесса вязания, более 30 фото, а также схемы.\nТакже Вы получите запись моего выступления на кукольной конференции, где я показывала, как вяжется сумочка \"Горошки\", а также рассказала о своей любимой пряже и украшалочках для кукол :)\nhttps://vk.com/market 95724412?w=product 95724412_94761/query"
            ],
            "title": [
                "Мастер класс \"Сумочки для кукол\" (Оксана Лифенко)"
            ]
        }
    ],
    [
        14.520521,
        {
            "text": [
                "https://i.ibb.co/pzvHrDN/I3d U T6 Gg TM.jpg\nhttps://i.ibb.co/NFrb6v6/N0ls Z9nwjb U.jpg\nВ описание входит штаны, кофта, берет, матросский воротник. Описание продается в формате PDF, состоит из 12 страниц формата А4 и может быть напечатано на любом принтере.\nОписание предназначено для кукол BJD RealPuki от FairyLand, но может подойти и другим подобным куклам. Также вы можете вязать этот наряд из обычной пряжи, и он подойдет для куколок побольше.\nhttps://vk.com/market 95724412?w=product 95724412_2212"
            ],
            "title": [
                "PDF Мастер Класс \"Морячок\" (Оксана Лифенко)"
            ]
        }
    ],
    [
        14.495346,
        {
            "text": [
                " \nhttps://shop.sexrf.com/media/amlabel/01_2017 06 14_02.pnghttps://shop.sexrf.com/media/amlabel/03_2017 06 14_02.pnghttps://shop.sexrf.com/media/amlabel/badge_smart.pnghttps://shop.sexrf.com/media/amlabel/badge_popular.png\nВедущая   психолог, сексолог Оксана Бачинская\nПродолжительность: 43 мин.\nhttps://i106.fastpic.ru/thumb/2018/1210/a4/_dbcf7af836512199407f1594ba506da4.jpeg\nХотите попробовать что то новое в формате \"соло\", или \"подкинуть хвороста\" в ваш костёр страсти? Сексолог Оксана Бачинская поможет определиться, что нужно именно вам!\nФрагмент вебинара «Секс игрушки: инструкция по применению»\n4xv9Yymyz9w\nСОДЕРЖАНИЕ ВЕБИНАРА:\n\nБесконтактный стимулятор клитора Satisfyer Pro G SPOT RABBIT\nИнновационный вибратор Gvibe Mini\nМини вибратор на палец Fun Toys Gring\nКлиторальный вибратор Qvibry Memo с USB накопителем\nИнновационный вибратор Gvibe Mini\nСтрапон с вибрацией SHAREVIBE\nИнновационный вибратор Gvibe Mini\nПульсатор BI STRONIC FUSION FF\nМассажер простаты Nexus Revo 2 (с USB зарядкой)\n shop.sexrf.com/video/online trening sextoys\n\n\n"
            ],
            "title": [
                "Секс игрушки: инструкция по применению (Оксана Бачинская)"
            ]
        }
    ],
    [
        14.48782,
        {
            "text": [
                "http://i92.fastpic.ru/thumb/2018/1028/fc/7fe5a69acd07c267a88639c5148c78fc.jpeg\nОМБИ   маникюр для САМОУЧКИ. Начинаем с Нуля\nПокрытие гель лаком под кутикулу.\n\n07 декабря четверг с 12:00 до 19:00 будет закрытая трансляция в Periscope\nТрансляцию можно смотреть и пересматривать в записи 30 дней\n\nАвтор Оксана Маляренко\n\n******ПРОГРАММА ТРАНСЛЯЦИИ******\n► Безопасный Комби для начинающих\n► 5 вариантов салонного КОМБИ маникюра, простая техника работы (ножницы щипчики)\n► Комбинированный маникюр (1фреза+ножницы) 3 вида под разный тип кожи\n► Универсальному комби маникюру для любого типа кожи\n► 3 салонные Техники укрепления, покрытия под кутикулу и максимально близко к кутикуле\n► Новые техники борьбы с отслойками и сколами в области свободного края\n► Комби маникюр ножничками и щипчиками (салонный вариант)\n\nЗакрытая трансляция от Оксаны Маляренко в перископ, в которой она расскажет и покажет, что нужно для начинающих мастеров, какие техники помогут начинающим сделать идеальный комби маникюр.\nD0pyz0yjorM\nD0pyz0yjorM"
            ],
            "title": [
                "Комби маникюр для самоучки, начинаем с нуля( Оксана Маляренко)"
            ]
        }
    ],
    [
        14.473087,
        {
            "text": [
                "http://i85.fastpic.ru/big/2016/1218/3f/fc153dcdcb53014e49470652427fb23f.jpg \n\n\nВЫ ЕЩЕ НЕ УСТАЛИ ТРАТИТЬ ДЕНЬГИ НА ОДЕЖДУ, КОТОРАЯ ВАС НЕ КРАСИТ?\n\n  Переполненный шкаф…\n\n  Надоевшая мысль: «Снова нечего надеть…»\n\n  Грустный взгляд на себя в зеркало...\n\n  Испорченное настроение...\n\nКОМПЛЕКСНЫЙ ПРАКТИЧЕСКИЙ ОНЛАЙН КУРС\n«НАУЧИТЕ МЕНЯ ОДЕВАТЬСЯ»\n\nЗа 6 недель курса вы не только научитесь прекрасно разбираться в искусстве стиля, но и получите мощную базу знаний в этом направлении.\n\nПосле обучения вы легко сможете сделать консультирование по стилю своим дополнительным источником дохода.\n\nПомимо углублённого изучения теории вас ждет интереснейшая практика в команде единомышленниц под чутким руководством стилиста профессионала Оксаны Болбот.\n\nhttp://course.wardrobe rehab.ru/"
            ],
            "title": [
                "Научите меня одеваться (Оксана Болбот)"
            ]
        }
    ]
]
kkonevets commented 5 years ago

I have removed misleading thread_id field in json in my previous comment.

kkonevets commented 5 years ago

I should highlight that I make a regular text query, not a phrase query. So I guess those docs where Оксана Лифенко is present in title should have a higher score than docs having just Оксана or Лифенко in title or body.

fulmicoton commented 5 years ago

Ok I was able to reproduce your example by create an index with two of your "top documents", and one of the "words are in title but not in body". I also added a bunch of fake docs to tweak artificially decrease the idf of your two terms, and manage to reproduce the order you experienced.

It may or may not be a bug, but I think this is still worth investigating.

fulmicoton commented 5 years ago

Elasticsearch does much better on this example. This is definitely worth investigating.

kkonevets commented 5 years ago

I think the main point is a formula that combines scores of two different fields. Maybe this #547 issue is some how related.

fulmicoton commented 5 years ago

Small update, I ended up on reenabling an explain function to make it easy to compare elasticsearch formula with tantivy's formula.

fulmicoton commented 5 years ago

Ok... So end of the investigation.

Tantivy sucks. So does ElasticSearch.

In tantivy, the score is simply the sum of the BM25 score over each field. Fieldnorm affects BM25 in two ways

Both effects are probably milder than we might want. Also they lose the nice saturation effect that we get with BM25: having a lot of occurences the same word is not as important as having all words in the doc.

Elasticsearch does not do a sum over the different fields but the max over the different fields. On the other hand, if there are 2 words in the query, and the best two docs only have a some of these words in their title, we do not consider any of the body clue that one might be more relevant than the other.

BM25F is aiming at addressing this problem and Lucene and ES is working using it. I think try to support BM25F too.

Interestingly, BM25F intuition is quite close to your idea of virtually concatenating title and body.

kkonevets commented 5 years ago

I thought that ES and Lucene already use BM25F. What is a default metric for ES? From what you said I conclude it is max over BM25 scores. Why not just use BM25F by default?

kkonevets commented 5 years ago

One more question. By fieldnorm you mean BM25F?

fulmicoton commented 5 years ago

I thought that ES and Lucene already use BM25F.

It was shipped in Lucene recently.

What is a default metric for ES? From what you said I conclude it is max over BM25 scores.

Yes.

Why not just use BM25F by default?

They might change that in the near future. We can change that now if it is not too hard.

petr-tik commented 5 years ago

Thanks for the investigation.

I would like to take this ticket, if it's still open and unassigned.

I have been reading about BM25F and wanted to clarify something.

Interestingly, BM25F intuition is quite close to your idea of virtually concatenating title and body.

From this tutorial I understood, that we don't just concatenate the fields together, instead we replicate each field weight number of times to increase the frequency of every term in that field.

I don't see how we can bake BM25F into the library, as it depends on knowing names and weights of fields supplied by the user query. The only thing I can think of is matching field names like "title" and "summary" and boosting them.

Hence, I think @kkonevets is right and this ticket is related to #547.

Furthermore, implementing #547 will enable users to write and optimise their own queries using their understanding of own indexes.