Это мой первый раз, когда я имею дело с оптимизированной функциональностью поиска, и часть моего опыта находится на переднем крае разработки под Android, но я готов принять приключение поиска в спящем режиме.Я понимаю функциональность SQL-запроса «LIKE», что он делает и его ограничения, вот почему я сразу перешел к hibernate-search (lucene), моя цель - сделать автоматическое предложение на основе входных данных (входных запросов),Это то, что я получил до сих пор
@Indexed
@Table (name = "shop_table")
@Entity
@AnalyzerDef(name = "myanalyzer",
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class), //
filters = { //
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = WordDelimiterFilterFactory.class),
@TokenFilterDef(factory = EdgeNGramFilterFactory.class, params =
{ @Parameter(name = "maxGramSize", value = "1024") }),})
@Analyzer(definition = "myanalyzer")
public class Shop implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
enter code here
@Field(index = Index.YES, store = Store.YES, analyze = Analyze.YES)
@Column(name = "name")
private String name;
... other methods
Мой запрос
Query lucenQuery = qb.keyword().onField("name").matching(searchTerm).createQuery();
Это просто базовый запрос, и я сосредоточен исключительно на конфигурации анализатора, чтобы получить то, чтоЯ хочу, это действительно сбивает с толку, на какой части я должен сосредоточиться, чтобы достигнуть того, чего я хочу, Tokenizing?Фильтрация?или сам запрос?в любом случае, я уже проиндексировал эти 2 фразы.
"Apache Lychee Department"
"Apache Strawberry Club Large"
Когда я обрабатываю / запрашиваю "Солома", он дает мне Apache Strawberry Club Large , но когда я обрабатываю / запрашиваю "Личи"или" Apache Lychee"запрос дает мне оба?Я только ожидаю, что Apache Lychee Department
То, как я понимаю, все мои настройки: / 10 *
EdgeNGramFilterFactory (1024) даст мне серию1024 индекса EdgeNGrams
LowerCaseFilterFactory даст мне все индексы в нижнем регистре
WordDelimiterFilterFactory отфильтруйте его, сделав запрос одним словом, и дайтемне соответствующие данные.
и каждая запись / данные будут маркированы как ключевое слово KeywordTokenizerFactory и будут проиндексированы 1024 EdgeNGram
Я пытался запросить фразу,но все равно получаю тот же результат
Query luceneQuery = qb.phrase().onField("name").sentence(searchTerm).createQuery();
Моя цель - иметь самовнушение ... или, по крайней мере, начать с имитации "LIKE" sql ..