Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr通配符EdgeNGramFilterFactory搜索前后搜索_Solr - Fatal编程技术网

Solr通配符EdgeNGramFilterFactory搜索前后搜索

Solr通配符EdgeNGramFilterFactory搜索前后搜索,solr,Solr,我正在使用EdgeNGramFilterFactory实现solr通配符搜索。我正在尝试实现前/后搜索。例如,搜索“格式系统”和“系统格式”以返回相同的结果。我已经为前后配置了EdgeNGramFilterFactory,但是只有前面的“格式系统”搜索正在工作,而不是后面的“系统格式”。你能告诉我哪里不对劲或者我在这里遗漏了什么吗 这是我的配置 <fieldType name="text_en" class="solr.TextField" positionIncrementGap="10

我正在使用EdgeNGramFilterFactory实现solr通配符搜索。我正在尝试实现前/后搜索。例如,搜索“格式系统”和“系统格式”以返回相同的结果。我已经为前后配置了EdgeNGramFilterFactory,但是只有前面的“格式系统”搜索正在工作,而不是后面的“系统格式”。你能告诉我哪里不对劲或者我在这里遗漏了什么吗

这是我的配置

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.StopFilterFactory" words="stopwords_en.txt" ignoreCase="true" />
                <!-- <filter class="solr.SnowballPorterFilterFactory" language="English" /> -->
                <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
                <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="back" />
            </analyzer>
</fieldType>

您提到的示例不太合适,因为它包含术语,并且当您搜索术语时,不需要任何通配符。如果您想搜索术语部分,例如sys,制作NGrams看起来是个好主意。我建议您查看solr分析页面以查看analyzer链的结果

EdgeNGramFilterFactory
配置了
side=“front”
,将单词system作为输入将产生以下术语:

sy sys syst syste system
em tem stem ystem system
通过这种方式,您可以搜索sys或syse并获得结果,即使您最初索引的术语是system

EdgeNGramFilterFactory
配置了
side=“back”
,将单词system作为输入将产生以下术语:

sy sys syst syste system
em tem stem ystem system
通过这种方式,您可以搜索tem或SYSTEM并获得结果

如果你把它们放在同一条链上,第二个分析器会处理第一个分析器产生的每一个术语。你基本上是在用每一个前NGram制作出后NGram,我想这不是你想要的


最好先澄清您的需求。如果您仍然希望前后生成NGrams,您应该在两个不同的字段中进行,然后您可以使用
edismax
解析器在这两个字段中进行搜索。好的,我的需求是搜索文本“系统格式”和“格式系统”“应该返回相同的结果。有没有办法做到这一点?也有没有办法将搜索词“a/C”视为AC,反之亦然?如果您只想搜索完整的单词,您可以颠倒它们的顺序,这已经是现成的,您不需要NGrams。关于第二个问题,请看一下感谢Javanna。。!反向搜索正在工作,但我在搜索“W’s”时遇到问题。如果我使用NGrams,搜索文本“W’s”不会返回任何记录,但如果我使用“W’s st”,它将返回正确的结果。。知道吗?我想这是个新问题。当问题不同时,不断更新同一个问题并不是那么方便。如果您已经解决了原始问题中提到的问题,请您将我的答案标记为已接受,并可能提出一个新问题?