В синтаксисе запроса Lucene я хотел бы совместить * и ~ в действительном запросе, подобном: bla ~ *//недопустимый запрос
Значение: Пожалуйста, сопоставьте слова, начинающиеся с "bla" или что-то похожее на "bla".
Обновление: То, что я делаю сейчас, работает для малого ввода, использует следующий (фрагмент схемы 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: используйте только оператор ~, поскольку префиксы явно присутствуют в индексе.