Solr NGram筛选与搜索项不匹配
我为我正在索引的关键字字段启用了NGram筛选,该字段包含以下逗号分隔的术语: wwwdebenhams.com、ebenhams.com、dbenhams.com、deenhams.com、debenhams.com、debenhams.com、debenhams.com、debenhams.com、debenhams.ocm、debenhams.con、debenhams.com、debenhams.copm、debenhams.comm、debenhams.coom、debenhams.xom、debenhams.cpm、ebenhams.com、dbenhams.com、deenhams.com、debehams.com、debehams.com、,debenams.com、debenhms.com、debenhas.com、debenham.com、 核心的架构如下所示:Solr NGram筛选与搜索项不匹配,solr,Solr,我为我正在索引的关键字字段启用了NGram筛选,该字段包含以下逗号分隔的术语: wwwdebenhams.com、ebenhams.com、dbenhams.com、deenhams.com、debenhams.com、debenhams.com、debenhams.com、debenhams.com、debenhams.ocm、debenhams.con、debenhams.com、debenhams.copm、debenhams.comm、debenhams.coom、debenhams.x
<?xml version="1.0" ?>
<schema name="merchant" version="1.0">
<types>
<!--
Default numeric field types. For faster range queries, consider the tint/tfloat/tlong/tdouble types.
-->
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="text_lowercase_ngram" class="solr.TextField" termPositions="false" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
splitOnCaseChange="0"
splitOnNumerics="0"
stemEnglishPossessive="0"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
preserveOriginal="1"
types="wdfftypes.txt"
/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="20"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
splitOnCaseChange="0"
splitOnNumerics="0"
stemEnglishPossessive="0"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
preserveOriginal="1"
types="wdfftypes.txt"
/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="20"/>
</analyzer>
</fieldType>
<fieldType name="text_exact" class="solr.TextField">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldType>
</types>
<fields>
<!-- Merchant Fields -->
<field name="id" type="int" indexed="true" stored="true" required="true"/>
<field name="site_id" type="int" indexed="true" stored="true" required="true"/>
<field name="title" type="text_lowercase_ngram" indexed="true" stored="true"/>
<field name="url" type="text_exact" indexed="true" stored="true"/>
<field name="keywords" type="text_lowercase_ngram" indexed="true" stored="true" />
<field name="description" type="text_lowercase_ngram" indexed="true" stored="true" />
<field name="type" type="int" indexed="true" stored="true"/>
<field name="popularity" type="int" indexed="true" stored="true"/>
<field name="category" type="text_exact" indexed="true" stored="true" multiValued="true"/>
</fields>
<!-- field to use to determine and enforce document uniqueness. -->
<uniqueKey>id</uniqueKey>
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>title</defaultSearchField>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="OR"/>
身份证件
标题
搜索“deb”将返回得分为6.4406505的匹配文档。搜索“debe”、“deben”、“debenh”和“debenha”不会返回任何结果。搜索“debenham”将返回得分为41.740173的匹配文档,“debenhams”将返回得分为111.30711的文档
我已经尝试使用查询分析器,它为上面的每个查询显示匹配的术语,但是我没有看到匹配的文档返回到结果中。是否有一种方法可以返回所有具有相应分数的文档,而不管它们是否为正匹配,以便更好地理解为什么不返回它们?首先,您应该在查询时删除NGramFilterFactory。您真的不需要对查询进行渲染,而这可能会弄乱您的结果。另外,您是否可能只查看前十个结果?Solr使用默认的
rows=10
参数;您可以使用start
参数增加或切换页面。查看查询返回的numFound
,其中包含结果总数,即使您没有看到所有结果。首先,您应该在查询时删除NGramFilterFactory。您真的不需要对查询进行渲染,而这可能会弄乱您的结果。另外,您是否可能只查看前十个结果?Solr使用默认的rows=10
参数;您可以使用start
参数增加或切换页面。查看查询返回的numFound
,其中包含结果总数,即使您没有看到所有结果。我已经重新阅读了ApacheSolr 3 Enterprise Search一书中有关N-Gram过滤的部分,该部分证实了您关于仅在索引时应用N-Gram过滤的评论。出于测试的目的,我的索引中只有一个文档,rows参数在这种情况下不相关。该参数可能有助于返回我的文档,并检查每个不同查询字符串的得分。答案是正确的。在移除N-Gram查询分析器之后,我现在将按照预期返回每个子字符串查询的结果。我已经重新阅读了ApacheSolr 3 Enterprise Search一书中关于N-Gram筛选的部分,该部分证实了您关于仅在索引时应用N-Gram筛选的评论。出于测试的目的,我的索引中只有一个文档,rows参数在这种情况下不相关。该参数可能有助于返回我的文档,并检查每个不同查询字符串的得分。答案是正确的。在移除N-Gram查询分析器之后,我现在按照预期返回每个子字符串查询的结果。