2013-05-15 6 views
1

У меня есть dynamicField как «pa_mydynamicfieldname» в Solr 4.0Facet запрос будет давать неправильный вывод на dynamicfield в Solr

У меня есть значение магазина в этой области, как:

Я индексировали мои данные путем кодирования с использованием системы. Web.HttpUtility.UrlEncode (pa_mydynamicfieldname) , такие как: 2.2 + ГГц + Intel Pentium + + Dual-Core E2200 +

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

<lst name="facet_fields"> 
<lst name="pa_mydynamicfieldname"> 
    <int name="2.2">1</int> 
    <int name="2.5">1</int> 
    <int name="core">1</int> 
    <int name="dual">1</int> 
    <int name="e2200">1</int> 
    <int name="ghz">1</int> 
    <int name="intel">1</int> 
    <int name="pentium">1</int> 
</lst> 

Вместо этого я хочу, чтобы результат как:

<lst name="facet_fields"> 
<lst name="pa_mydynamicfieldname"> 
    <int name="2.2+GHz+Intel+Pentium+Dual-Core+E2200">1</int> 
</lst> 

, как можно сделать это в Solr, применяя фасет запрос?

Обновлено 15 мая-13

из схемы, текстовое поле определяется следующим образом:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 

и динамические поля определяется как:

<dynamicField name="pa_*" type="text" indexed="true" stored="true" multiValued="true" required="false" /> 

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

Пожалуйста, помогите мне.

Благодаря

ответ

3

Для того, чтобы выполнить поведение, которое вы желающие, вам нужно будет изменить FieldType для динамического поля в вашем schema.xml. В настоящее время ваш pa_mydyanmicfieldname, вероятно, определен как type="text_general" и с multivalued="true". Таким образом, ваше значение поля разделяется на токены, и эти токены затем сохраняются как несколько значений. Это создает поведение, которое вы показываете с несколькими словами/токенами, возвращаемыми как значения фасета.

Поскольку вы хотите сохранить первоначальное значение, как вы представить его, пожалуйста, измените FieldType только простая старая строка, а не многозначное:

<dynamicField name="*_mydynamicfeldname" type="string" 
      indexed="true" stored="true"/> 

Или вы можете попеременно использовать предопределенные строки на основе динамической поле, определенное в примере schema.xml:

<dynamicField name="*_s" type="string" indexed="true" stored="true" /> 

Вам нужно будет индексировать ваши данные после того, как сделать это изменение в вашей schema.xml для новых типов полей, которые будут храниться надлежащим образом и отражено в результатах поиска.

+0

Благодарим за предложение, обновленный вопрос с дополнительной информацией. Я попробую сегодня снова с изменением типа на строку из текста и обновления здесь. Еще раз спасибо. – Herin

+0

Основываясь на вашем обновленном вопросе, вы можете включить многозначное значение, в этом случае ключом будет строка типа. Поскольку текстовое значение является тем, что заставляет его разбиваться на несколько записей (2.2, GHZ и т. Д.) Для каждого отдельного значения. –

+1

Спасибо, теперь он работает, изменяя тип от «text» до «string». – Herin

 Смежные вопросы

  • Нет связанных вопросов^_^