2015-08-28 2 views
0

let say У меня есть многозначное поле с именем myfield и некоторые документы, содержащие некоторые значения в myfield.Поиск на плоских многозначных полях

Теперь я начинаю запрос, как это:

myfield:foobar 

Результат будет выглядеть примерно так:

<doc> 
    <arr name="myfield"> 
    <str>foobar_1</str> 
    <str>foobar_2</str> 
    </arr> 
</doc> 
<doc> 
    <arr name="myfield"> 
    <str>foobar_3</str> 
    <str>foobar_4</str> 
    </arr> 
</doc> 

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

<arr name="myfield"> 
    <str>foobar_1</str> 
    <str>foobar_2</str> 
    <str>foobar_3</str> 
    <str>foobar_4</str> 
</arr> 

Возможно ли это каким-то образом? Какой-нибудь хороший намек для меня?


Давайте попробуем объяснить, хочу я хочу сделать:

Каждый документ моего индекса Solr имеет список обозначений (хранится в многозначного поля). Теперь я хочу искать и просматривать эти обозначения.

Мне нужен специальный результат для результата, поэтому я напишу свой собственный QParserPlugin.

ответ

2

Если вы просто хотите, чтобы все термины из поля - используйте фасет или компонент терминов. Поскольку вы, видимо, не заинтересованы в самих документах, фасет может быть тем, что вы хотите.

+0

Идеально ... Я не думал об этом ... –

1

Я не думаю, что это возможно от solr. Solr всегда будет возвращать документ так, как он был создан. Когда вы определяете свой документ в файле schema.xml.

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

+0

Плохо. Потому что я получу все записи «myfield» документа, поэтому я должен снова проверить, какой из них был найден при поиске, не так ли? – Obenland

+0

да, и вам было бы сложно проверить, что у него нет никакого идентификатора ... например, если у вас есть два одинаковых значения, как бы вы определили, какой из них попал ... –

+0

Хорошо, спасибо. Я, вероятно, должен переосмыслить эту функцию ... – Obenland