Solr/SolrJ: Как вы выделяете нетекстовые поля?

Мне удалось включить подсветку типов текстовых полей, но не для нетекстовых типов полей...

Как настроить solr для выделения нетекстовых типов полей? Я не могу найти пример в Интернете для нетекстовых полей. Это вообще возможно?

В частности, я хочу выделить значение даты в документе, соответствующем запросу.

Я использую solrJ для выполнения запроса, может ли это быть ограничивающим фактором?


person Moogie    schedule 14.07.2011    source источник


Ответы (2)


Выделение невозможно в нетекстовых полях. Посмотри на это:

/**
   * Returns a collection of the names of all stored fields which can be
   * highlighted the index reader knows about.
   */
  public Collection<String> getStoredHighlightFieldNames() {
    if (storedHighlightFieldNames == null) {
      storedHighlightFieldNames = new LinkedList<String>();
      for (String fieldName : fieldNames) {
        try {
          SchemaField field = schema.getField(fieldName);

Особенно здесь:

          if (field.stored() &&
                  ((field.getType() instanceof org.apache.solr.schema.TextField) ||
                  (field.getType() instanceof org.apache.solr.schema.StrField))) {

пока здесь

            storedHighlightFieldNames.add(fieldName);
          }
        } catch (RuntimeException e) { // getField() throws a SolrException, but it arrives as a RuntimeException
            log.warn("Field \"" + fieldName + "\" found in index, but not defined in schema.");
        }
      }
    }
    return storedHighlightFieldNames;
  }
person fyr    schedule 14.07.2011
comment
Спасибо! Хотя как я и опасался :( - person Moogie; 15.07.2011
comment
Как тогда определить, какие нетекстовые поля привели к тому, что документ соответствует запросу? - person Moogie; 15.07.2011
comment
Вы имеете в виду, вероятно, какие нетекстовые поля соответствуют части запроса. Afaik нет реализации для возврата прямых совпадений. - person fyr; 15.07.2011
comment
Спасибо за ответ, я не уверен, что мы говорим об одном и том же... - person Moogie; 15.07.2011
comment
Спасибо за ответ, однако я не уверен, что мы говорим об одном и том же... Скажем, у меня есть документ с двумя текстовыми полями A=aaaaa и B=sssss и одним полем даты D=20100101. Запрошен запрос, инициированный пользователем ( A:blah AND D:20100101 ). Он возвращает документ, но я не знаю, какое поле в документе соответствует запросу (т.е. дата), так как дата не выделяется. - person Moogie; 15.07.2011
comment
Именно это я и имел в виду. Нет встроенных функций для проверки того, какое поле соответствует запросу, например, в таком запросе, как: ADATE: что-то ИЛИ BDATE: что-то ИЛИ CDATE: что-то - person fyr; 15.07.2011
comment
ах, жаль. Спасибо за всю вашу помощь. Мне просто нужно спросить клиента, предпочтут ли они удалить/изменить требование, связанное с подсветкой, или увеличить смету расходов из-за необходимости либо расширить solr по умолчанию, либо выполнить некоторую постобработку для определения. - person Moogie; 17.07.2011

Вы не можете сделать это, как было объяснено.

Но адаптировать Solr для этого очень просто. Создайте еще одно поле для даты, но в формате строки. Теперь просто используйте copyField:

<field name="date1" type="date" indexed="true" stored="true" />
<field name="date1_str" type="string" indexed="true" stored="true" />

<copyField source="date1" dest="date1_str"/>

Затем просто добавьте поле date1_str в свой запрос.

person Matthew Wilcoxson    schedule 16.02.2012