Apache 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找不到文档,为什么会出现这种

通过查询在Solr中搜索文档时遇到问题。
该文档如下所示:

{
  "id": "890_03366_00739",
  "text": ["2509412 MARCO GLLMRC86E28L736X  03366 00739 "],
  "_version_": 1612212288969769000
}
如果我使用query
text:GLLMRC86E28L736进行搜索,我正确地找到了文档。
如果我尝试使用query
text: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筛选器。它可以工作,谢谢。唯一的问题是,我需要重新索引整个核心。