This commit is contained in:
2021-12-04 10:57:16 +01:00
parent 7555063580
commit 0a3b949968
111 changed files with 57 additions and 7 deletions
@@ -0,0 +1,45 @@
/**
*
*/
package de.bstly.board;
import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
import org.apache.lucene.analysis.core.WhitespaceTokenizerFactory;
import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilterFactory;
import org.apache.lucene.analysis.ngram.EdgeNGramFilterFactory;
import org.apache.lucene.analysis.snowball.SnowballPorterFilterFactory;
import org.hibernate.search.backend.lucene.analysis.LuceneAnalysisConfigurationContext;
import org.hibernate.search.backend.lucene.analysis.LuceneAnalysisConfigurer;
import org.springframework.context.annotation.Configuration;
/**
* @author _bastler@bstly.de
*
*/
@Configuration
public class LuceneConfig implements LuceneAnalysisConfigurer {
/*
* @see org.hibernate.search.backend.lucene.analysis.LuceneAnalysisConfigurer#
* configure(org.hibernate.search.backend.lucene.analysis.
* LuceneAnalysisConfigurationContext)
*/
@Override
public void configure(LuceneAnalysisConfigurationContext context) {
context.analyzer("english").custom().tokenizer(WhitespaceTokenizerFactory.class)
.tokenFilter(LowerCaseFilterFactory.class)
.tokenFilter(SnowballPorterFilterFactory.class).param("language", "English")
.tokenFilter(ASCIIFoldingFilterFactory.class)
.tokenFilter(EdgeNGramFilterFactory.class).param("minGramSize", "1")
.param("maxGramSize", "10");
context.analyzer("german").custom().tokenizer(WhitespaceTokenizerFactory.class)
.tokenFilter(LowerCaseFilterFactory.class)
.tokenFilter(SnowballPorterFilterFactory.class).param("language", "German")
.tokenFilter(ASCIIFoldingFilterFactory.class)
.tokenFilter(EdgeNGramFilterFactory.class).param("minGramSize", "1")
.param("maxGramSize", "10");
}
}
@@ -93,16 +93,16 @@ public class SearchManager implements SmartInitializingSingleton {
if (classes.contains(Entry.class)) {
return searchSession.search(classes)
.where(f -> f.bool()
.should(f.match().field("title").matching(search)
.should(f.match().fields("title", "title_de").matching(search)
.boost(settingsManager.getGravity()))
.should(f.match().field("text").matching(search)))
.should(f.match().fields("text", "text_de").matching(search)))
.sort(f -> sortByDate
? (asc ? f.field("created").asc() : f.field("created").desc())
: (asc ? f.score().asc() : f.score().desc()))
.fetch(page * size, size);
} else {
return searchSession.search(classes)
.where(f -> f.bool().should(f.match().field("text").matching(search)))
return searchSession.search(classes).where(
f -> f.bool().should(f.match().fields("text", "text_de").matching(search)))
.sort(f -> sortByDate
? (asc ? f.field("created").asc() : f.field("created").desc())
: (asc ? f.score().asc() : f.score().desc()))
@@ -19,6 +19,7 @@ import javax.persistence.Table;
import javax.persistence.Transient;
import org.hibernate.search.engine.backend.types.Projectable;
import org.hibernate.search.engine.backend.types.Searchable;
import org.hibernate.search.engine.backend.types.Sortable;
import org.hibernate.search.mapper.pojo.bridge.mapping.annotation.ValueBridgeRef;
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField;
@@ -56,7 +57,8 @@ public class Comment {
private Long parent;
@Lob
@Column(name = "text", nullable = false)
@FullTextField
@FullTextField(name = "text", searchable = Searchable.YES, analyzer = "english")
@FullTextField(name = "text_de", searchable = Searchable.YES, analyzer = "german")
private String text;
@Enumerated(EnumType.STRING)
@Column(name = "flagged_status", nullable = false, columnDefinition = "varchar(255) default 'NORMAL'")
@@ -20,6 +20,7 @@ import javax.persistence.Table;
import javax.persistence.Transient;
import org.hibernate.search.engine.backend.types.Projectable;
import org.hibernate.search.engine.backend.types.Searchable;
import org.hibernate.search.engine.backend.types.Sortable;
import org.hibernate.search.mapper.pojo.bridge.mapping.annotation.ValueBridgeRef;
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.DocumentId;
@@ -67,11 +68,13 @@ public class Entry {
@Column(name = "url")
private String url;
@Column(name = "title", nullable = false)
@FullTextField(name = "title")
@FullTextField(name = "title", searchable = Searchable.YES, analyzer = "english")
@FullTextField(name = "title_de", searchable = Searchable.YES, analyzer = "german")
private String title;
@Lob
@Column(name = "text")
@FullTextField(name = "text")
@FullTextField(name = "text", searchable = Searchable.YES, analyzer = "english")
@FullTextField(name = "text_de", searchable = Searchable.YES, analyzer = "german")
private String text;
@Transient
private List<String> tags;