Apache Solr文本搜索
通过查询在Solr中搜索文档时遇到问题。Apache Solr文本搜索,apache,search,solr,Apache,Search,Solr,通过查询在Solr中搜索文档时遇到问题。 该文档如下所示: { "id": "890_03366_00739", "text": ["2509412 MARCO GLLMRC86E28L736X 03366 00739 "], "_version_": 1612212288969769000 } 如果我使用querytext:GLLMRC86E28L736进行搜索,我正确地找到了文档。 如果我尝试使用querytext:GLLMRC86E28L736X找不到文档,为什么会出现这种
该文档如下所示:
{
"id": "890_03366_00739",
"text": ["2509412 MARCO GLLMRC86E28L736X 03366 00739 "],
"_version_": 1612212288969769000
}
如果我使用querytext:GLLMRC86E28L736进行搜索,我正确地找到了文档。
如果我尝试使用querytext:GLLMRC86E28L736X
找不到文档,为什么会出现这种情况?
在我的模式中,text
字段被声明为
我正在使用Solr7.0.0。
更新:
“分析”页面显示我的字段“文本”和查询GLLMRC86E28L736X的输出
查询GLLMRC86E28L736
通过GLLMRC86E28L736X进行搜索
GLLMRC86E28L736搜索
字段类型“text\u general”声明为
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="15" minGramSize="2"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
您的EdgeNgramFilter具有一个maxGramSize
设置,该设置切断了标记的结尾-索引时会删除X,而查询时会保留X(如果您尝试匹配前缀,则应该如此)
在分析屏幕的左侧,您可以看到它生成了GLLMRC86E28L736X
的版本,但最后一个字符被删除-即,它在添加最后一个字符之前停止生成版本。查询仍然是GLLMRC86E28L736X
,并且由于没有令牌匹配GLLMRC86E28L736X
(仅GLLMRC86E28L736
,因为它在生成后停止),因此没有命中
为您的字段调整maxGramSize
,或者,如果您只想获得精确匹配,则针对不进行任何边缘编程的字段进行搜索
此外,如果我没记错的话,这不是示例中包含的text\u general
字段类型的默认表单,因此在将来,如果您也包含字段类型,这将很有帮助。根据您发布的详细信息,它应该按照您的预期工作。对于给定的字段类型、索引文本和您的查询,core下的“分析”页面显示了什么?我在“索引”分析器中添加了分析和打印屏幕EdgeNGramFilterFactory上的maxGramSize设置为15,在“查询”分析器中没有EdgeNGramFilterFactory筛选器。我应该编辑一些内容吗?是的,因为maxGramSize设置为15
,并且GLLMRC86E28L736X
有16个字符,所以15
之后的任何内容都会被截断。如果您想保留所有令牌,而不考虑其大小,请将maxGramSize
设置为最长令牌的长度(如果您不知道最长令牌是什么,并且仍然希望生成最大大小的令牌,则仅设置32768)。如果您不需要前缀搜索,请删除edge ngram筛选器。它可以工作,谢谢。唯一的问题是,我需要重新索引整个核心。