Весенний Поисковый Lucene - Термин Правописание Изменено - PullRequest
0 голосов
/ 26 октября 2018

Эта проблема буквально безумна; Я в течение 3 часов разбиваю голову об стену, пытаясь понять, что это может вызвать.

Это POJO (добытчики и сеттеры удалены):

public class Author extends Auditable<String> implements Serializable {
    private static final long serialVersionUID = -590157884690722884L;
    @Id
    @DocumentId
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Expose
    private Long id;
    @Field(name = "firstName", store = Store.YES, analyze = Analyze.NO, termVector = TermVector.NO)
    @Column
    @Expose
    private String firstName;
    @Field(name = "middleName", store = Store.YES, analyze = Analyze.NO, termVector = TermVector.NO)
    @Column
    @Expose
    private String middleName;
    @Field(name = "lastName", store = Store.YES, analyze = Analyze.NO, termVector = TermVector.NO)
    @Column
    @Expose
    private String lastName;

С этим мостом:

public class AuthorBridge implements FieldBridge {
    @Override
    public void set(String s, Object o, Document document, LuceneOptions luceneOptions) {
        Author author = (Author) o;
        luceneOptions.addFieldToDocument(s + ".firstName", author.getFirstName(), document);
        luceneOptions.addFieldToDocument(s + ".lastName", author.getLastName(), document);
    }
}

В этом документе POJO (удаленные и удаленные методы установки):

@Indexed
@Entity
@DiscriminatorValue("POEM")
public class Poem extends Item implements Serializable {
    private static final long serialVersionUID = 3631244231926795794L;
    @Field(name = SearchConstants.POEM_FORM, store = Store.YES, analyze = Analyze.NO, termVector = TermVector.NO)
    @Column
    private String form; // The form of genre of the poem.
    @Embedded
    private Confirmation confirmation;
    @Field(name = SearchConstants.TEXT, store = Store.YES, analyze = Analyze.YES, termVector = TermVector.YES)
    @Analyzer(definition = SearchConstants.TEXT_ANALYZER)
    @ElementCollection(fetch = FetchType.EAGER)
    @IndexedEmbedded
    private List<String> text;
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "annotation_id")
    private Annotation annotation;
    @JsonIgnore
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @Fetch(value = FetchMode.SUBSELECT)
    private List<Version> versions;
    @JsonIgnore
    @Column
    private boolean processed;
    @Embedded
    private TopicModel topicModel;
    @Column
    private Integer pageNumber;

Сокращает author.lastName, ТОЛЬКО с именем Шекспира. (Меняет название на Шекспир).

Почему Lucene / Spring Search делает это? Есть тысячи других документов, с которыми это не происходит. Сокращается только имя Шекспира.

Вот объект БД, который должен отображаться в Шекспира:

enter image description here

1 Ответ

0 голосов
/ 26 октября 2018

Ну, решение действительно простое.Поле передается из MappedSuperClass (элемент), и поле было проанализировано неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...