部分文字列の Solr 検索の作成に問題があります。たとえば、ユーザーが「Alfa Romeo Land Car」を検索する場合、完全なブランド ( 「Land Rover」ではなく「Alfa Romeo」のみ) のみを一致させたいと考えています。これを行う方法は、クエリから帯状疱疹を作成し、「車のブランド」Solr コアと完全に一致させようとすることです。
したがって、ユーザーが「AB C」を検索した場合、帯状疱疹 [A、AB、ABC、B、BC、C] を取得したいと考えています。
しかし、以下の Solr 構成を使用すると、(EDisMax または標準クエリ パーサーを使用して)「AB C」を検索すると、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 管理 Web ページで、[Schema Browser] に移動し、問題のフィールドを選択して [Load Term Info] を押すと、次の索引付けされた用語が表示されます。
6
/6 Top-Terms:
1
ABC
ABCD
BC
BCD
CD
AB
「AB C」を検索すると、次の帯状疱疹 [ABC AB BC ABC] が必要ですが、デバッグ クエリからは次のようになります。
"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 はこれらの文字列を検索しないようです。私が欠けているものを誰か知っていますか?
事前にどうもありがとう