Как добавить данные в динамические поля при использовании функции извлечения solr? - PullRequest
0 голосов
/ 13 октября 2011

Я использую библиотеку PHP под названием solr-php-client (http://code.google.com/p/solr-php-client/) для взаимодействия с моим сервером Solr. Я могу извлекать данные из документа, сохранять их и искать на них, но не могуполучите его, чтобы я мог добавить свои собственные данные в параметры индексации:

$aParams = array
(
    "literal.ClassName_ms" => "File",
    "literal.SS_ID_i" => 73,
    "literal.Name_ms" => "OverviewOfBenefits.pdf",
    "literal.title" => "Overview Of Benefits",
    "literal.Created_dt" => "2011-09-19T13:50:30Z",
    "literal.last_modified_dt" => "2011-10-12T19:33:59Z",
    "literal.SS_Stage_ms" => "Live",
    "literal.ClassNameHierarchy_ms" => array("Object","ViewableData","DataObject","File"),
    "literal.id" => "File_73_Live",
    "fmap.content" => "text",
);

try {

    $oResponse = $oSOLR->extract($sFilePath, $aParams);
    $oSOLR->commit();
    $oSOLR->optimize();

}
catch(Exception $e) {
    var_dump($e);
}

Я могу запросить «текст» и получить результаты:

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
 <int name="status">0</int>
 <int name="QTime">0</int>
 <lst name="params">
  <str name="indent">on</str>
  <str name="start">0</str>
  <str name="q">text:Overview</str>
  <str name="rows">10</str>
  <str name="version">2.2</str>
 </lst>
</lst>
<result name="response" numFound="1" start="0">
 <doc>
  <arr name="content_type"><str>application/pdf</str></arr>
  <str name="id">File_73_Live</str>
  <date name="last_modified">2011-02-07T16:21:10Z</date>
 </doc>
</result>
</response>

Но я не могу запроситьлюбое из динамических полей, то есть "SS_Stage_ms":

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
 <int name="status">0</int>
 <int name="QTime">0</int>
 <lst name="params">
  <str name="indent">on</str>
  <str name="start">0</str>
  <str name="q">SS_Stage_ms:Live</str>
  <str name="rows">10</str>
  <str name="version">2.2</str>
 </lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>

Вот соответствующие определения схемы:

<field name="id" type="string" indexed="true" stored="true" required="true" /> 
<field name="title" type="text" indexed="true" stored="true" multiValued="true"/>
<field name="text" type="text" indexed="true" stored="false" multiValued="true"/>
<dynamicField name="*_i"  type="int"    indexed="true"  stored="false"/>
<dynamicField name="*_ms"  type="string"  indexed="true"  stored="false" multiValued="true"/>
<dynamicField name="*_dt" type="date"    indexed="true"  stored="false"/>

1 Ответ

0 голосов
/ 14 октября 2011

Я переключил определения схемы для хранения данных, чтобы видеть, как поля интерпретируются Solr:

<field name="id" type="string" indexed="true" stored="true" required="true" /> 
<field name="title" type="text" indexed="true" stored="true" multiValued="true"/>
<field name="text" type="text" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_ms"  type="string"  indexed="true"  stored="true" multiValued="true"/>
<dynamicField name="*_dt" type="date"    indexed="true"  stored="true"/>

После этого я обнаружил, что все поля переключаются в нижний регистр. Я нашел свой ответ (http://wiki.apache.org/solr/ExtractingRequestHandler):

lowernames = true | false - сопоставить все имена полей строчными буквами с подчеркиванием. Например, Content-Type будет сопоставлен с content_type.

По умолчанию "нижние имена" установлены в true. Я добавил "нижние имена" в параметры, установил его в false и вуаля, это сработало!

...