Как добавить атрибут в индекс Сфинкса из схемы? - PullRequest
0 голосов
/ 11 июня 2018

Я использую PHP XMLWriter:

$xmlwriter->startElement('sphinx:schema');

   $xmlwriter->startElement('spinx:attribute');
     $xmlwriter->writeAttribute("name", "path");
     $xmlwriter->writeAttribute("type", "string");
   $xmlwriter->endElement(); // attr

   $xmlwriter->startElement('sphinx:field');
      $xmlwriter->writeAttribute("name", "content");
   $xmlwriter->endElement(); // field

$xmlwriter->endElement(); // schema

$xmlwriter->startElement('sphinx:document');
   $xmlwriter->writeAttribute("id", 1);
   $xmlwriter->writeAttribute("path", "TEST_ATTRIBUTE");
   $xmlwriter->startElement("content");
      $xmlwriter->text("TEST_CONTENT");
   $xmlwriter->endElement(); // field
$xmlwriter->endElement(); // doc
$xmlwriter->endElement(); // docset

Итак, я получаю:

<?xml version="1.0" encoding="UTF-8"?>
<sphinx:docset>
  <sphinx:schema>
    <spinx:attribute name="path" type="string"/>  - why there is '/>' not '>'?
    <sphinx:field name="content"/>
  </sphinx:schema>

  <sphinx:document id="1" path="TEST_ATTRIBUTE">
    <content>TEST_CONTENT</content>
  </sphinx:document>
</sphinx:docset>

Поэтому я стараюсь: indexer --rotate --all --config / etc / sphinxsearch / sphinx.conf Sphinx 2.2.11-id64-release (95ae9a6) с использованием файла конфигурации 'sphinx.conf' ... индексирование индекса 'test1' ...

ПРЕДУПРЕЖДЕНИЕ: количество атрибутов равно 0: переключение на нет docinfo

Так что я не получаю атрибут в индексе.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Это правильный код !!!

$xmlwriter = new xmlWriter();
$xmlwriter->openMemory();
$xmlwriter->setIndent(true);
$xmlwriter->startDocument('1.0','UTF-8');
$xmlwriter->startElement('sphinx:docset');

$xmlwriter->startElement('sphinx:schema');

$xmlwriter->startElement('sphinx:field');
   $xmlwriter->writeAttribute("name", "content");
$xmlwriter->endElement(); // field

$xmlwriter->startElement('sphinx:attr');
  $xmlwriter->writeAttribute("name", "path");
  $xmlwriter->writeAttribute("type", "string");
$xmlwriter->endElement(); // attr

$xmlwriter->endElement(); // schema

$xmlwriter->startElement('sphinx:document');
    $xmlwriter->writeAttribute("id", 1);

  $xmlwriter->startElement("content");
    $xmlwriter->text("TEST_CONTENT2");
  $xmlwriter->endElement(); // field

  $xmlwriter->startElement("path");
    $xmlwriter->text("TEST_ATTRIBUTE2");
 $xmlwriter->endElement(); // field

$xmlwriter->endElement(); // doc

$xmlwriter->endElement(); // docset
print $xmlwriter->outputMemory(true);
0 голосов
/ 11 июня 2018

Похоже на опечатку ...

$xmlwriter->startElement('spinx:attribute');
                      -----^

почему есть '/>' не '>'?

https://www.google.com/search?q=XML+closing+tags

Каждый открытый тег должен быть закрыт.XML педантичен по этому поводу.Однако, если тег пуст (без содержимого), один тег может служить как открывающим, так и закрывающим тегом, если он заканчивается символом />, а не>.XML - Libxml2 http://www.xmlsoft.org/XMLinfo.html

...