поиск "-" в websolr - PullRequest
       24

поиск "-" в websolr

3 голосов
/ 02 апреля 2012

websolr возвращает

 RSolr::Error::Http - 400 Bad Request
Error: <html><head><title>Apache Tomcat/6.0.28 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 400 - org.apache.lucene.queryParser.ParseException: Cannot parse '----': Encountered &quot; &quot;-&quot; &quot;- &quot;&quot; at line 1, column 1.
Was expecting one of:
   &quot;(&quot; ...
   &quot;*&quot; ...
   <QUOTED> ...
   <TERM> ...
   <PREFIXTERM> ...
   <WILDTERM> ...
   &quot;[&quot; ...
   &quot;{&quot; ...
   <NUMBER> ...

при попытке поиска символа "-".

другие специальные символы работают нормально, например ":" и т. Д. Я пытался использовать CGI.escape, ноот этих персонажей не сбежать.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2012

Как правильно заметил Крис, вам нужно избежать обратной косой черты.

В зависимости от того, какой анализатор запросов вы используете, есть некоторые специальные символы, которые имеют значение. На момент написания этой статьи синтаксический анализатор запросов Lucene (и, следовательно, Solr) назначает специальное значение этим символам:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

Вам следует обратиться к документации для Синтаксис синтаксического анализатора запросов Lucene для их полного значения. Парсер запросов Solr по умолчанию предлагает расширенный синтаксис синтаксического анализатора запросов Lucene, как описано на вики-странице SolrQueryParser .

Если вы не хотите беспокоиться об экранировании, то DisMax Query Parser предназначен для приема ввода, который ближе к тому, что пользователь может ввести в поле поиска. Я не проверял различные специальные против него в последнее время, но, как правило, он более изящен в вводе, который он принимает.

2 голосов
/ 03 апреля 2012

Вы пытались экранировать его с помощью обратной косой черты?

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

Полный синтаксис запроса Solr здесь: http://wiki.apache.org/solr/SolrQuerySyntax

...