Я работаю с индексом 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.