Как создать однозначное поле в Solr / Solarium? - PullRequest
0 голосов
/ 23 апреля 2020

Я сделал ванильную установку Solr и Solarium для PHP

Solarium 5.x PHP 7.1 Solr 8.5.1

Я могу создавать и запрашивать документы. Но все поля, которые я создаю, возвращаются как массивы, кроме «id». очевидно, где-то есть схема, которая указывает, что id является полем с одним значением. Как я могу создать свои собственные поля с одним значением? Все поля, которые я создаю, являются массивами с несколькими значениями.

Функция поля с несколькими значениями полезна, но есть только несколько случаев, когда она мне понадобится.

Кажется, я должен быть в состоянии определить типы полей и указать, являются ли они многозначными или нет, но вместо этого все поля, которые я создаю, являются многозначными массивами, и я не могу изменить это. В документации по солярию есть раздел, посвященный многозначным полям, но не однозначным.

https://solarium.readthedocs.io/en/stable/documents/#multivalue -поля

В солярии я не вижу никакой документации для определения документов и их типов полей. возможно, что-то не так с моей установкой.

вот мой пример кода:

$client = new Solarium\Client($config);

// get an update query instance
$update = $client->createUpdate();

// create a new document for the data
$doc1 = $update->createDocument();
// add data to the document
$doc1->id       = 123; // single value by default
$doc1->name     = 'document name'; // always results in an array
$doc1->price    = 5; // always results in an array


// add the documents and a commit command to the update query
$update->addDocuments(array($doc1));
$update->addCommit();

// this executes the query and returns the result
$result = $client->update($update);

// then query the documents
$query = $client->createSelect();
$query->setQuery('*:*');
$resultSet = $client->select($query);

echo 'NumFound: '.$resultSet->getNumFound().'<br>';
foreach ($resultSet as $document) {
    foreach ($document as $field => $value) {
        // I can test to see if $value is an array but my point is that I don't want
        // to do so for every single field.  how can I define fields that are single-value by default?
        echo '<div'> . $field . ' : ' . $value . '</div>';
    }
}

это выводит:

NumFound: 1
id: 123
name: Array
price: Array

yes Я знаю, как получить эти значения из массива, но я знаю, что должен быть какой-то способ получить поля с одним значением по умолчанию.

Заранее спасибо.

1 Ответ

0 голосов
/ 23 апреля 2020

Я обнаружил, что могу определить multiValued = "false" и многие другие подробные свойства поля, вручную редактируя управляемую схему (схема. xml) в каталоге conf для ядра.

однако в верхней части этого файла написано:

Итак, теперь реальный вопрос в том, как вы редактируете схему SOLR?

...