我在创建Solr搜索子字符串时遇到问题。例如,当用户搜索"阿尔法罗密欧陆地车"时,我想只匹配完整的品牌(仅限#34;阿尔法罗密欧",不&#34 ;路虎")。我试图这样做的方法是从我的查询中创建带状疱疹,然后尝试与我的"汽车品牌进行完全匹配" Solr核心。
因此,如果用户搜索" A B C",我想得到带状疱疹[A,AB,ABC,B,BC,C]。
但是当我使用下面的Solr配置时,当我搜索" A B C" (使用EDisMax或标准查询解析器)Solr什么都不返回,但是如果搜索" ABC"我得到了匹配的结果" ABC"。
这是我的schema.xml文件:
<field name="id" type="tint" indexed="true" stored="true" required="true"/>
<field name="name" type="text_exact" indexed="true" stored="true" required="true"/>
<field name="seoAlias" type="string" indexed="true" stored="true" required="true"/>
<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="0" generateWordParts="0" catenateAll="1" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="0" generateWordParts="1" catenateAll="0" />
<filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramsIfNoShingles="true" tokenSeparator="" maxShingleSize="5"/>
</analyzer>
</fieldType>
以下是我的Solr核心文件:
"response": {
"numFound": 7,
"start": 0,
"docs": [
{
"id": 1,
"name": "A B C D",
"seoAlias": "abce",
"_version_": 1524585748644233200
},
{
"id": 2,
"name": "A B C",
"seoAlias": "abce",
"_version_": 1524586301229105200
},
{
"id": 3,
"name": "B C D",
"seoAlias": "abce",
"_version_": 1524586311147585500
},
{
"id": 4,
"name": "A B",
"seoAlias": "abce",
"_version_": 1524586322261442600
},
{
"id": 5,
"name": "B C",
"seoAlias": "abce",
"_version_": 1524586329997836300
},
{
"id": 6,
"name": "C D",
"seoAlias": "abce",
"_version_": 1524586338173583400
},
{
"id": 7,
"name": "B",
"seoAlias": "abce",
"_version_": 1524652609127841800
}
]
},
在Solr管理员网页中,如果我转到&#34; Schema Browser&#34;,然后选择相关字段,然后按&#34;加载术语信息&#34;我可以看到以下索引术语:
6
/6 Top-Terms:
1
ABC
ABCD
BC
BCD
CD
AB
当我搜索&#34; A B C&#34;我想要以下带状疱疹[ABC AB BC A B C] 但是从调试查询我得到:
"response": {
"numFound": 0,
"start": 0,
"docs": []
},
"debug": {
"rawquerystring": "*:*",
"querystring": "*:*",
"parsedquery": "MatchAllDocsQuery(*:*)",
"parsedquery_toString": "*:*",
"explain": {},
"QParser": "LuceneQParser",
"filter_queries": [
"name:\"A B C\""
],
"parsed_filter_queries": [
"**MultiPhraseQuery**(name:\"(A AB ABC) (B BC) C\")"
],
我认为问题可能与 MultiPhraseQuery 有关。它会创建看似正确的带状疱疹,但似乎Solr不会使用这些字符串进行搜索。有人知道我错过了什么吗?
提前多多感谢