2017-01-28 5 views
0

В Solr documentaion я вижу, что с помощью dismax я могу поместить значение запроса от пользователя так, как есть. https://cwiki.apache.org/confluence/display/solr/The+DisMax+Query+ParserDismax-анализатор запросов и специальные значения

Анализатор запросов DisMax поддерживает чрезвычайно упрощенное подмножество синтаксиса Lucene QueryParser . Как и в Lucene, котировки могут использоваться для группировки фраз, а +/- могут использоваться для обозначения обязательных и необязательных предложений. Все другие Lucene анализатор запросов специальные символы (кроме AND и OR) экранируются упростить пользовательский опыт

Таким образом, только те значения имеют некоторые специальные значения: AND, NOT, +, -,»

Но когда я использую НЕ фразу она также ведет себя как логический оператор Кроме того, когда у меня есть запрос:.

q:"Difference Java &&", 

я получаю:

"metadata":[ 
     "error-class","org.apache.solr.common.SolrException", 
     "root-error-class","org.apache.solr.parser.ParseException"], 
    "msg":"org.apache.solr.search.SyntaxError: Cannot parse 'Difference Java &&': Encountered \"<EOF>\" at line 1, column 18.\r\nWas expecting one of:\r\n <NOT> ...\r\n \"+\" ...\r\n \"-\" ...\r\n <BAREOPER> ...\r\n \"(\" ...\r\n \"*\" ...\r\n <QUOTED> ...\r\n <TERM> ...\r\n <PREFIXTERM> ...\r\n <WILDTERM> ...\r\n <REGEXPTERM> ...\r\n \"[\" ...\r\n \"{\" ...\r\n <LPARAMS> ...\r\n \"filter(\" ...\r\n <NUMBER> ...\r\n <TERM> ...\r\n \"*\" ...\r\n ", 
    "code":400}} 

Не понял ли я что-то или его ошибка в документации? Есть ли какой-то простой способ игнорировать все специальные символы lucene и просто вызывать запрос пользователя от пользователя в результате разборки запроса? Стандартный токенизатор должен в любом случае использовать эти значения (это нормально для меня)

+0

вы могли бы разместить весь SOLR запрос, который вы делаете –

+0

я подозреваю, что вы на самом деле не использовать кавычки. SyntaxError _would have_ включал такие кавычки: 'Can not parse '\" Difference Java && \ "''. Однако с кавычками не было бы ошибки. Если какой-либо из моих запросов DisMax (без кавычек) заканчивается или начинается с '&&' или 'AND' или' || 'или' OR', такая же синтаксическая ошибка, как указано выше. Пример запроса: q = hello + AND & df = content & defType = dismax'. Мне интересно, будет ли это ожидаемым поведением или должно считаться ошибкой, учитывая, что DisMax должен обрабатывать ввод от обычных пользователей, таких как веб-поисковая система. – Felizett

ответ

0

Как указано, цитаты могут использоваться для группировки фраз, все, что вам нужно сделать, - это избежать кавычек.

Внутренне, он использует двойные кавычки, и когда вы проходите то же самое, он разбивает его. Поэтому избегайте этого, тогда он должен работать нормально.

д: «Разница Java & &»

Кроме того, я полагаю, вы используете & & для логических операторов, так что вам не нужно передать его в кавычки

Я делая этот запрос ("java" & & "python") в моем местном

Parser анализирует его co правильно после кодирования & ->% 26.

д = "Java" % 20 **% 26% 26% 20 ** "питона" & мас = & JSON отладки = истинная & QF = creator_txt & defType = dismax

"parsedquery_toString": "+ (+ (creator_txt: Java) + (creator_txt: питон)) ()",