首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于/terms的Solr搜索

基于/terms的Solr搜索
EN

Stack Overflow用户
提问于 2013-05-08 14:25:57
回答 1查看 390关注 0票数 0

我有一个使用SOLR数据库的PHP应用程序。当我执行/terms请求(术语医生)时,出现了这个问题

因此,我们感兴趣的部分文件是

代码语言:javascript
复制
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"
],

我们的要求是

代码语言:javascript
复制
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

反应是

代码语言:javascript
复制
{
    responseHeader: {
        status: 0,
        QTime: 4
    },
    terms: {
        text: [
            "bistriå",
            16
        ]
    }
}

结果的问题是结果文本被截断。我原以为“小酒馆”是一个城市小酒馆ța的UTF-8编码。但是结果似乎在特殊字符上被截断了。

奇怪的是,如果我用字段名为"poi“而不是"text”来请求,就会得到正确的响应。

代码语言:javascript
复制
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类型在模式中定义如下

代码语言:javascript
复制
<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>

如果有人要求,我可以提供更多的细节。不知道我现在能补充些什么,也不要过多地夸大这个问题。

EN

回答 1

Stack Overflow用户

发布于 2013-05-08 17:29:41

您可能想要考虑在您的AsciiFoldingFilterFactory字段中使用text_general来适当地处理特殊字符。另外,请参考Solr提供的可能对您有用的语言分析支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16443248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档