0

Я попытался добавить новый столбец в существующий индекс поиска, но он выдает ошибку, как указано ниже: - Поле docname присутствует 0 раз ; Ожидаемый 1 java.lang.IllegalArgumentException: Поле docname присутствует 0 раз; Ожидаемый 1Может кто-нибудь помочь мне добавить новый столбец в Google cloud Индекс поиска с помощью Java

Я вижу, что новый столбец добавлен в индекс поиска, но не может получить индекс.

По моим наблюдениям, я вижу, что существующие записи в индексе не имеют новых данных столбца и, следовательно, он дает эту ошибку, но новые записи будут иметь эти значения столбца. Кто-нибудь может мне с этим помочь.

ответ

0

По этой проблеме сегодня я немного искал документацию. Это была довольно неприятная ошибка, поскольку на самом деле она не указывала, где проблема в моем коде.

Оказывается, что при использовании getOnlyField("something") на Document (в данном случае на одном из многих вернувшихся из поискового запроса), если это поле не на самом деле еще существует в этом конкретном документе бросает java.lang.IllegalArgumentException.

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

public static Long getNumberField(ScoredDocument d, String name, Long defaultValue) { 
    try { 
     return d.getOnlyField(name).getNumber().longValue(); 
    } catch (IllegalArgumentException e) { 
     return defaultValue; 
    } 
} 

Что называется в коде результатов поиска:

Long numberValue = SearchUtils.getNumberField(scoredDocument, "featuredOrder", -1L) 

Это позволяет мне поймать эту ошибку и вернуть значение по умолчанию, если оно не существует.

Документация представлена ​​здесь: https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/search/Document.html#getOnlyField-java.lang.String-