В синтаксисе запросов Lucene Я хотел бы объединить * и ~ в допустимом запросе аналогичен: ла ~ * // некорректного запросаLucene query: bla ~ * (совпадающие слова, начинающиеся с чего-то нечеткого), как?
Значение: Пожалуйста, сопрягать слова, которые начинаются с «л» или что-то подобное «л».
Update: Что я делаю сейчас, работает небольшой вход, это использовать следующий (фрагмент схемы Solr):
<fieldtype name="text_ngrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
В случае, если вы не используете Solr, это делает следующее.
Indextime: Индексные данные, создавая поле, содержащее все префиксы моего (короткого) ввода.
Searchtime: используйте только оператор ~, поскольку префиксы явно указаны в индексе.
Althoug нечеткий поиск не работают на фиксированное количество символов, для моего случая просто используя ~ не будет работать (для большого дифференциала в подсчете символов). Я хочу соответствовать, например. Санла в Сундлаугарвегур. –
, конечно, если бы я мог сказать lucene только совпадение по первым символам x каждого слова в индексе, используя ~ будет работать ... –
Вам нужно будет выйти за рамки Lucene здесь, использовать алгоритм сравнения строк, такой как Levenstein, Jaro -Winkler и т. Д. (Qv. Ниже) – Mikos