2014-04-10 4 views
2

Я работаю над проектом, который использует API текстового поиска Google App Engine, чтобы пользователи могли искать документы, содержащие поле слов. Я сортирую с помощью MatchScorer, который согласно the documentation «назначает оценку, основанную на частоте периода в документе».Как я могу сортировать результаты индекса поиска appengine по релевантности?

Когда пользователь вводит запрос типа «бизнес-промо», я конвертирую его в строку запроса, которая выглядит как words:business OR words:promo. Я ожидал, что это вернет документы, содержащие как слова «бизнес», так и «промо» перед документами, в которых содержится только одно из слов (так как в документации говорится, что он присваивает оценку, основанную на частоте термина в документе). Тем не менее, я часто вижу результаты, которые содержат только одно из слов перед документами, которые содержат оба.

Я также пробовал запросить с помощью RescoringMatchScorer, но с той же проблемой можно использовать этот бомбардир.

Я подумал о том, чтобы делать отдельные запросы - те, которые И условия поиска и те, что или поисковые термины, - но для этого потребуется много запросов, если пользователь вводит более двух поисковых терминов. Например, если я искал «продвинутых бизнес-решений», я должен был бы запросы, как это, чтобы покрыть все основания:

words:advanced AND words:business AND words:solutions 
words:advanced AND words:business 
words:advanced AND words:solutions 
words:business AND words:solutions 
words:advanced OR words:business OR words:solutions 

Кто-нибудь есть какие-либо намеки на то, как выполнить поиск, которые возвращают более релевантные результаты (т.е. больше поисковых матчей) до менее значимых результатов?

ответ

0

Возможно, это зависит от того, как вы интерпретируете фразу «term frequency». Я думаю, вы интерпретируете это как «сколько из моих поисковых терминов появляется в документе». Но это также может означать «сколько раз (любой из) поисковых терминов появляется в каждом документе», и действительно - по крайней мере, согласно некоторым простым экспериментам, которые я сделал - последнее, по-видимому, является фактическим поведением.

Например, документ, содержащий слово «бизнес» 20 раз и никогда не упоминающий слово «промо», будет называться выше, чем документ, содержащий «бизнес» и «промо» только один раз каждый. Разве это трюк с поведением, которое вы видите?

+0

Да, это связано с поведением, которое я вижу. Однако, должен ли документ, который соответствует как «промо», так и «бизнес» один раз, имеет более высокий балл, чем документ, который только соответствует «бизнесу» один раз? Я вижу точно тот же sort_score, возвращенный для обоих этих случаев, который кажется wwrong. – Greg

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