Hibernate Search:获取包含给定关键字的索引字段

时间:2016-05-23 17:07:19

标签: hibernate indexing solr lucene hibernate-search

我是使用Hibernate Search的新手,这是我的实现: 我从实体及其领域开始

@AnalyzerDef(name = "ngram",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class ),
filters = {

  @TokenFilterDef(factory = StandardFilterFactory.class),
  @TokenFilterDef(factory = LowerCaseFilterFactory.class),
  @TokenFilterDef(factory = StopFilterFactory.class),
  @TokenFilterDef(factory = NGramFilterFactory.class,
    params = {
      @Parameter(name = "minGramSize", value = "3"),
      @Parameter(name = "maxGramSize", value = "3") } )
}
)

@Indexed
@Entity
@Table(name="USERS")
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    @Field
    @Column(nullable=false,length=30,name="first_name")
    private String firstName;

    @Column(nullable=false,length=30,name="last_name")
    private String lastName;


    @Column(length=128)
    @Field(analyzer=@Analyzer(definition="ngram"))
    private String login;

    @Column(length=255)
    private String password;

在我的数据库中,我有2条记录,其中包含以下数据:

| id | first_name | last_name |登录|密码|

| 1 | NULL | NULL | mednabli | * | | 2 | NULL | NULL | med-nabli | * |

当我对字段登录进行研究时,我会显示结果的登录信息:

键入关键字:med

结果:mednabli med-nabli

键入关键字:med -

结果:(没有),而我需要获得med-nabli

键入关键字:nabli

结果:med-nabli,而我需要获得mednabli med-nabli

键入关键字:kamed

结果:(没有),而我需要获得mednabli med-nabli

那么有没有办法让搜索得到理想的结果,是否有一个分析器,我应该依靠它来使我的应用程序正常运行我想要?

1 个答案:

答案 0 :(得分:1)

所以,首先,你只能通过一个领域获得你想要的东西。因此,您需要创建另一个字段(请参阅@Fields注释以在单个属性上定义多个字段)。此新字段应包含关键字标记生成器和小写过滤器。然后,您应该通过查询两个字段(带有一个)来查询第二个字段是通配符查询" yoursearch "来构建查询。

这将解决您的所有情况,除了这一个:"键入的关键字:kamed"。至于这个,您能提供构建和执行查询的方式吗?

注意:在您的登录搜索中定义停止过滤器不是一个好主意,因此您应将其删除。