Какой тип поля, токенайзер и запрос я должен использовать в Solr, чтобы иметь возможность искать поле, хранящее JSON? - PullRequest
3 голосов
/ 17 мая 2011

Я работаю с индексом Solr (v1.4.1), в котором есть поле, в котором хранится сериализованный JSON. Вот пример JSON, хранящегося в поле с именем «json» в документе в Solr .

{
    "uri": "http://localhost/individual/n503",
    "name": "Smith, Richard",
    "title": "Programming CIO",
    "items": [{
        "uri": "http://localhost/individual/n1873",
        "type": "http://localhost/individual/book"
    }]
}

Я хотел бы запросить это сериализованное поле JSON на наличие URI (например, http://localhost/individual/n1873). Я использую Scala с SolrJ (v1.4.1) для запроса результатов. Функция выглядит так:

def documentsForUri(uri: String) = {
  var query = new SolrQuery();
  query.setQuery( "json:" + uri )
  var rsp = solr.query( query )
  rsp.getResults()
}

Передав uri = "http://localhost/individual/n1873" в функцию, получается 0 документов. Я попытался изменить ":", чтобы быть "\:", и это, похоже, не помогло. В моем schema.xml я попытался определить поле как solr.StrField и solr.TextField. Например:

<types>
...
  <fieldType name="text" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"/>
...
</types>
<solrQueryParser defaultOperator="OR"/>

Определения полей, которые я пробовал, выглядели так:

<fields>
...
  <field name="json" type="text" indexed="true" stored="true" multiValued="false" required="false"/>
...
</fields>

и это:

<fields>
...
  <field name="json" type="text_ws" indexed="true" stored="true" multiValued="false" required="false"/>
...
</fields>

Ни одна из этих комбинаций не работала со спасенной строкой запроса uri ("\:") и неэкранированной строкой uri (":").

Можно ли выполнить то, что я пытаюсь сделать? Я действительно пытаюсь сделать эквивалент «подобно» в запросе SQL для поля, в котором хранится сериализованный JSON.

1 Ответ

3 голосов
/ 18 мая 2011

Вот токенайзер JSON для Solr , к сожалению, патч никогда не был зафиксирован, поэтому он не включен в Solr.Или вы можете просто использовать Noggit (или любой другой анализатор JSON) и предварительно обработать JSON на клиенте (т.е. в своем коде Scala), а затем поместить эти обработанные данные в отдельное индексированное поле в Solr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...