0

我正在使用休眠搜索。问题是,当我执行搜索此字符串时:

“升”

我没有结果...如果我尝试这个...

“升*”

结果是:

“Lampada bla bla” “Lampione bla bla bla” “迷失”

这是我的pojo

@Id @GeneratedValue
@DocumentId
private Long id;

@Field(index=Index.TOKENIZED, store=Store.YES )
private String nome;

@Field(index=Index.TOKENIZED,store=Store.YES, termVector=TermVector.YES)
private String descrizione;

@Column(length=30)
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}

@Column(length=100)
public String getDescrizione() {
    return descrizione;
}
public void setDescrizione(String descrizione) {
    this.descrizione = descrizione;
}
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}

@Override
public String toString() {
    return String.format("(%s) %s: %s", id, nome, descrizione);
}

这是我的java类:

Session session = super.session();
    List result = new ArrayList();
    luceneSession = Search.getFullTextSession(session);

    String[] fields = (String[]) boostsNField.keySet().toArray(new String[boostsNField.keySet().size()]);

    QueryParser parser =  new MultiFieldQueryParser(Version.LUCENE_30, fields, new StandardAnalyzer(Version.LUCENE_30), boostsNField);
    StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);


    try {
        Query luceneQuery = parser.parse(queryString);
        org.hibernate.Query fullTextQuery = luceneSession.createFullTextQuery( luceneQuery ); // E' possibile scegliere impostare il class da ricercare
        result = fullTextQuery.list();

    } catch (ParseException e) {

问题出在哪里??!?!?

4

1 回答 1

1

您可能正在使用 StandardAnalyzer 来索引文档。正如 javadoc 所说,它使用StandarkTokenizer。这个分词器从文本中提取单词并用一些简单的规则处理它们(阅读 javadoc)。然后会发生一些标记过滤,但通常单词会变成标记。

我不知道细节,但我认为在搜索时,lucene 比较/搜索标记(在你的情况下是单词),所以用“l”查询结果为空列表,因为“l”标记与“Lampada”不同令牌。

如果您想使用索引文档的任何子字符串来搜索您的索引,您应该考虑使用/编写基于 ngrams () 的分词器。对于给定字符串的每个可能的子字符串,它都会产生令牌。将“Lampada”作为字符串,它将产生“L”、“La”、“Lam”、...、“ada”、“da”、“a”,然后即使使用 StandardTokenizer 和 query="l 查询 LuceneIndex " 您会找到匹配的文档(请注意,这种方法会提高索引增长的速度)。

于 2011-01-13T19:52:59.837 回答