在 Lucene 查询语法中,我想将 * 和 ~ 组合在一个有效的查询中,类似于:bla~* //invalid query
含义:请匹配以“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:仅使用 ~ 运算符,因为前缀明确存在于索引中。