私はここで何が起こっているのか把握しようとしていますが、これまでは空になっています。私は誰かが私が解決策を探すことができる場所について私に指導を提供できることを望んでいる。/ Solr:ワイルドカードと大文字と小文字の区別の検索
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
は、私は次のキーを持っているいくつかのレコードを持って、私はこれらのレコードを返すためのSolrを取得するために、さまざまな検索をしようとしている
"text":[
"NOFX_SiteTest_4",
"NOFX_SiteTest_4\nNOFX_SiteTest_4\n Fourteen\n Ten\n Thirteen\n Fifteen\n Two\n 3\n Select Fields"
]
"text":[
"NOFX_SiteTest_44",
"NOFX_SiteTest_44\nNOFX_SiteTest_44\n Fourteen\n Ten\n Thirteen\n Fifteen\n Two\n 3\n Select Fields"
]
"text":[
"NOFX_SiteTest_445",
"NOFX_SiteTest_445\nNOFX_SiteTest_445\n Fourteen\n Ten\n Thirteen\n Fifteen\n Two\n 3\n Select Fields"
]
値:私はそのように定義されたテキストフィールドを持っています。問題は、(ワイルドカードを追加する場所と、ワイルドカードを追加する場所と、アンダースコアに関する検索テキストを残す場所に基づいて)クエリをどのように構造化するかによって、予期せぬ、間違った結果が得られます。ここで私はSolrの管理クエリページから走った検索は、次のとおりです。
SEARCH
text:((NOFX_SiteTest_4*)) OR text_exact:((NOFX_SiteTest_4*))
RESULT
3 Records (correct)
SEARCH
text:((NOFX_SiteTest_)) OR text_exact:((NOFX_SiteTest_))
RESULT
3 Records (correct)
SEARCH
text:((NOFX_SiteTest)) OR text_exact:((NOFX_SiteTest))
RESULT
3 Records (correct)
SEARCH
text:((NOFX_SiteTest*)) OR text_exact:((NOFX_SiteTest*))
RESULT
3 Records (correct)
SEARCH
text:((nofx_sitetest_4)) OR text_exact:((nofx_sitetest_4))
RESULT
1 Record (correct)
SEARCH
text:((nofx_sitetest_4*)) OR text_exact:((nofx_sitetest_4*))
RESULT
0 Records (incorrect)
SEARCH
text:((nofx_sitetest_)) OR text_exact:((nofx_sitetest_))
RESULT
3 Records (correct)
SEARCH
text:((nofx_sitetest*)) OR text_exact:((nofx_sitetest*))
RESULT
0 Records (incorrect)
それは私には思われるものから、このフィールドの設定に基づいて、Solrには同じように、これら2つのクエリを見てする必要があります。
text:((NOFX_SiteTest_4*)) OR text_exact:((NOFX_SiteTest_4*))
と
text:((nofx_sitetest_4*)) OR text_exact:((nofx_sitetest_4*))
なぜそれが文字が適切に計上される最初の検索では、レコードの適切な数が返された場合、それがすべてだ2回目の探索であり、小文字ではありません。これらのクエリの実行時にはまだ、:
text:((NOFX_SiteTest_)) OR text_exact:((NOFX_SiteTest_))
と
text:((nofx_sitetest_)) OR text_exact:((nofx_sitetest_))
をレコードの適切な数が返されます。ワイルドカードを含めると、問題が発生するのはなぜですか?特に、検索が完全に小文字で構成されている場合は?
誰かが私を正しい方向に向けることを望んでいます。私はドキュメントを探して、同様の問題を検索してきましたが、私が問題を解決するのに役立つとは思えません。
EDIT:いくつかの追加情報ここで
は、私は上記の私の検索で使用している二つのフィールドの定義です:
<field name="text" type="text" indexed="true" stored="true" multiValued="true"/>
<field name="text_exact" type="text_exact" indexed="false" stored="false" multiValued="true"/>
<!-- copy all fields to the default search field -->
<copyField source="title" dest="text"/>
<copyField source="content" dest="text"/>
<copyField source="Comment" dest="text"/>
<!-- copy all fields to the exact match search field -->
<copyField source="title" dest="text_exact"/>
<copyField source="content" dest="text_exact"/>
<copyField source="Comment" dest="text_exact"/>
text
とtext_exact
の唯一の違いは、フィールドタイプが定義されている方法です。私の検索が
text:((NOFX_SiteTest_4*)) OR text_exact:((NOFX_SiteTest_4*))
である場合には(私は上記の状態として)それは3つのレコードを検索しますが、それはとてもためtext_exact
フィールド、ないtext
フィールドで行います。私はそれが奇妙だと分かった検索を実行する
text_exact:((NOFX_SiteTest_4*))
戻り3、レコードが、検索に
text:((NOFX_SiteTest_4*))
戻り0レコードを実行しています。私はtext_exactがデータを返す理由を見ることができます。 text_exact
フィールドに正確なテキストがあるためです。しかし、なぜtext
に対する検索でレコードが得られないのか分かりません。そのフィールドはもう少し開放的で寛大ではありませんか?ワイルドカード検索をさらに許可できますか?アスタリスクを削除すると、正確なテキストがtext
フィールドにあるレコードが返されるためです。アスタリスクをワイルドカードとして使用していないのはなぜですか?
最後に、ワイルドカードを削除してテキストをすべて小文字に変更すると、text
フィールドを検索しても問題なくそのレコードが検索されます。だから、問題がどんなものであっても、アスタリスクをワイルドカードとして使用することと関係があるようです。
Solr解析ツールは私にはあまり言いません。私はそれを読む方法について多くを学んだと思います。スキーマ内のフィルタを移動し、追加のテキスト:フィールドクエリを追加しましたが、何も変更されませんでした。小文字のクエリは依然としてドキュメントを生成しませんでした。 – Christoph
あなたのプリントスクリーンを教えてください。 https://lucene.apache.org/solr/guide/6_6/analysis-screen.html – Oyeme
私の元の質問:https://imgur.com/a/IPO7N。推奨クエリ:https://imgur.com/a/g2fx0それはまだ私にとってギリシャ語です。私は今分析ツールを読んでいます。 – Christoph