Мы пытаемся сопоставить XML-поле структурированного контента OpenCMS с полем SOLR, чтобы выполнить поиск, используя это поле в качестве фильтра.
Поле XML описывается следующим образом в файле XSD:
<xsd:complexType name="OpenCmsContrato">
<xsd:sequence>
[...]
<xsd:element name="numeroExpediente" type="OpenCmsString" minOccurs="1" maxOccurs="1" />
[...]
</xsd:sequence>
<xsd:attribute name="language" type="OpenCmsLocale" use="required"/>
</xsd:complexType>
А это настройки поиска элемента, определенные в том же XSD-файле:
<xsd:annotation>
<xsd:appinfo>
[...]
<searchsettings>
<searchsetting element="numeroExpediente" searchcontent="true">
<solrfield targetfield="numexp" />
</searchsetting>
</searchsettings>
[...]
</xsd:appinfo>
</xsd:annotation>
Целевое поле SOLR "numexp" определяется следующим образом в файле SOLR schema.xml:
<fields>
<field name="numexp" type="string" indexed="true" stored="true" />
[...]
</fields>
И вот как мы выполняем запрос к SOLR в файле JSP:
CmsSearchManager manager = OpenCms.getSearchManager();
CmsSolrIndex index = manager.getIndexSolr("Solr Online");
String query = "fq=type:contrato";
if (!"".equals(text))
query += "&fq=numexp:" + text;
CmsSolrResultList listFiles = index.search(cmso, query);
Когда мы выполняем этот код, мы получаем listFiles.size() = 0, но когда мы меняем поле фильтра на предопределенное поле SOLR «контент», следующим образом:
if (!"".equals(text))
query += "&fq=content:" + text;
получаем ожидаемый результат.
С объектом CmsSearchResource, который мы получаем, используя поле SOLR «content» в качестве фильтра, мы можем перебирать поля его внутреннего I_CmsSearchDocument, получая в результате этот список:
id
contentblob
path
type
suffix
created
lastmodified
contentdate
relased
expired
res_locales
con_locales
template_prop
default-file_prop
notification-interval_prop
NavPos_prop
enable-notification_prop
locale_prop
NavText_prop
Title_prop
category
ca_excerpt
timestamp
score
link
Отсутствие поля "numexp" в списке. Почему? Мы пропустили какой-либо шаг? Нужно ли нам настраивать что-то еще, чтобы сопоставление работало?