[英]Solr searching with /terms
我有一個使用SOLR數據庫的PHP應用程序。 我在執行/ terms請求時出現了問題( term doc )
因此,我們感興趣的文檔部分是
poi: "Bistriţa",
...
text: [
"ddt",
"Numeric",
"/14/Gagaga 2/11/Economics/17/datenow",
"/20/Daniel_same/11/Economics/17/datenow",
"0/Gagaga 2",
"1/Gagaga 2/Economics",
"2/Gagaga 2/Economics/datenow",
"0/Daniel_same",
"1/Daniel_same/Economics",
"2/Daniel_same/Economics/datenow",
"ppla",
"seat of a first-order administrative division",
"/19/Daniel_same/1071/Plurinational State of Bolivia/2269/Cuba/2272/Bistriţa",
"0/Daniel_same",
"1/Daniel_same/Plurinational State of Bolivia",
"2/Daniel_same/Plurinational State of Bolivia/Cuba",
"3/Daniel_same/Plurinational State of Bolivia/Cuba/Bistriţa",
"0/Undefined_activity",
"Year",
"0/1999",
"0/1999",
"Measured",
"",
"utf8"
],
請求是
http://localhost:8080/solr/terms
?wt=json
&indent=true
&terms.sort=count
&terms.mincount=1
&terms.limit=10
&terms.regex.flag=case_insensitive
&terms.regex=.*bi.*
&terms.fl=text
響應是
{
responseHeader: {
status: 0,
QTime: 4
},
terms: {
text: [
"bistriå",
16
]
}
}
結果的問題是結果文本被截斷。 我期待的是“BistriÅ£a”,它是Bistrița城市的UTF-8編碼。 但是結果似乎被特殊字符截斷了。
奇怪的是,如果我使用字段名稱“ poi”而不是“ text”進行請求,則會得到正確的響應
http://localhost:8080/solr/terms
?wt=json
&indent=true
&terms.sort=count
&terms.mincount=1
&terms.limit=10
&terms.regex.flag=case_insensitive
&terms.regex=.*bi.*
&terms.fl=poi
{
responseHeader: {
status: 0,
QTime: 4
},
terms: {
text: [
"Bistriţa",
16
]
}
}
因此,該單詞不會被截斷。
這兩個字段之間的最大區別是類型。 Poi具有字符串類型, 文本具有text_general類型。 在這樣的模式中定義了text_general類型
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- 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.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
如果需要,我可以提供更多詳細信息。 不知道我現在可以添加什么,也不要過多地質疑這個問題。
你可能想考慮使用AsciiFoldingFilterFactory在text_general
領域妥善處理特殊字符。 此外,請參考Solr提供的“ 語言分析”支持,它可能對您有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.