我正在使用SOLR搜索引擎。
几天后我想出了在给定列上执行类似操作的要求。
例如:
Column name: Name
Content: Stackoverflow is good.
查询
Name:("*overflow is*")
这个查询应该具体给我 “Stackoverflow很好。”因此
此输入参数应视为整个输入。它不应被视为自由文本搜索。它应该像SQL中的“like”操作一样工作。
对于使用此配置的iam。
<fieldtype class="solr.TextField" name="string_wildcards" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldtype>
此查询未按照“喜欢”操作的预期给我结果。
例如:姓名:(“溢出”)
将搜索为自由文本,而不是像'LIKE'运算符。
它给我结果
我的预期结果仅为第4点,其中上述配置为我提供了所有4个结果,这是错误的。
请帮我正确配置我的要求。
答案 0 :(得分:1)
关键是,您使用StandardTokenizerFactory分割/标记您的输入。
在这种情况下,您需要搜索*overflow
和is*
。
但是:左侧的通配符,如
默认情况下,solr不支持*溢出
。 在这种情况下,您必须将字段(列)“名称”索引两次。
这意味着:添加一个类型为string_wildcards的文件名,因为你写了一个添加第二个字段 - 让我们从类型left_wildcards_string中调用它eman
(反向:名称)。在此字段类型定义中,您可以添加solr.ReversedWildcardFilterFactory
最后,您可以搜索这两个字段。
答案 1 :(得分:0)
关键字之间的默认布尔参数是OR,这就是获得所有4个结果的原因。