Amazon CloudSearch возвращает ложные результаты
У меня есть БД статей, и я хотел бы найти все статьи, которые: 1. содержат слово "RIO" либо в заголовке, либо в отрывке 2. содержат слово "БРАЗИЛИЯ" в parent_post_content 3. и в определенный диапазон времени
Запрос, который я ищу (структурированный) был:(and (phrase field=parent_post_content 'BRAZIL') (range field=post_date ['2016-02-16T08:13:26Z','2016-09-16T08:13:26Z'}) (or (phrase field=title 'RIO') (phrase field=excerpt 'RIO')))
но по какой-то причине я получаю результаты, которые содержат "RIO" в заголовке, но не содержат "BRAZIL" в parent_post_content.
Это особенно странно, потому что я попытался ограничить только заголовок (а не отрывок) этим запросом:(and (phrase field=parent_post_content 'BRAZIL') (range field=post_date ['2016-02-16T08:13:26Z','2016-09-16T08:13:26Z'}) (phrase field=name 'RIO'))
и результаты кажутся в порядке.
Я новичок в CloudSearch, так что, скорее всего, у меня есть синтаксические ошибки, но я не могу их найти. Помогите?
2 ответа
Видимо проблема была не в запросе, а в отображаемом контенте. Я по глупости верил, что контент, отображаемый на сайте CloudSearch, был полным, и поэтому пришел к выводу, что он не содержит Бразилию. Но, увы, это не полный контент, и когда я проверяю полный контент, Бразилия была там.
Извините за шалость.
Вы используете phrase
оператор, но на самом деле не ищет фразу; было бы лучше использовать term
оператор (или нет оператора) вместо. Я не могу понять, почему это должно иметь значение, но использование чего-либо за пределами того, как это было задумано, может привести к непредвиденным последствиям.
Вот как я бы переписал ваши запросы:
Использование термина (в основном используется только если вы хотите увеличить поля):(and (term field=parent_post_content 'BRAZIL') (range field=post_date ['2016-02-16T08:13:26Z','2016-09-16T08:13:26Z'}) (or (term field=title 'RIO') (term field=excerpt 'RIO')))
Без оператора (я считаю это самым простым):(and parent_post_content:'BRAZIL' (range field=post_date ['2016-02-16T08:13:26Z','2016-09-16T08:13:26Z'}) (or title:'RIO' excerpt:'RIO'))
Если это не поможет, вы можете опубликовать полный запрос? Я хотел бы проверить, например, что вы используете синтаксический анализатор структурированных запросов, так как упомянули, что вы новичок в CloudSearch.
Вот некоторые соответствующие документы от Amazon:
- Сложные запросы для получения дополнительной информации о различных операторах
- Поиск текста для уточнения по фразе оператора