java - Spring Search Lucene - 术语拼写已更改
问题描述
这个问题简直是疯了。我已经把头撞在墙上了 3 个小时,试图找出导致这种情况的原因。
这个 POJO(删除了 getter 和 setter):
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,仅使用莎士比亚的名字。(它把名字改成了shakespear)。
为什么 Lucene / Spring Search 这样做?有 1,000 份其他文件不会出现这种情况。只有莎士比亚的名字被截断。
这是应该映射到莎士比亚的 DB 对象:
解决方案
好吧,解决方案非常简单。该字段是从 MappedSuperClass(项目)传递的,并且该字段的分析不正确。
推荐阅读
- android-studio - 在需要短信和通话权限的 Play 商店发布 Android 应用时出现问题,有人知道如何解决吗?
- c# - (UNITY) 是否可以根据 Screen.Orientation 更改布局而不复制所有游戏对象?
- javascript - 从同一 LAN 中的其他设备访问时,Node 和 Express 后端不提供图像资源
- java - 如何使用套接字将多个服务器连接到 Java 中的客户端?
- google-sheets - 计算Google表格中一定范围内素数数量的公式
- amazon-dynamodb - DynamoDB - 全局表冲突解决
- c# - RSACng 无法验证哈希
- c - 非阻塞连接不向 kqueue 报告完成
- c++ - 如何将枚举类型向量的向量保存在
- r - 包 'ggbiplot' 不可用(对于 R 版本 3.5.3)?