用于将逗号分隔值存储到单个字段中的Solr模式&使用PHP获取

时间:2016-08-08 12:31:27

标签: solr

我在我的应用程序中使用SolR搜索。我有一组书籍(基于权限),用于根据注册期间分配给他们的角色访问不同的用户。现在,当用户进入搜索特定书籍时,如果为他的角色配置了书籍(在查询中动态传递role_id),那么只需要在搜索结果中显示该书籍,否则不应该列出。

使用GROUP_CONCAT(角色,''){空格分隔值}函数在solr I中进行索引,该函数映射到solr文档中的roles字段。

我有如此处所示的架构<field name="roleid" type="string" indexed="true" stored="true" required="true" multiValued="false" />。 在搜索记录的过程中,我作为&#39; roleid:11&#39;没有找到任何结果。

索引期间的示例&#34; roleid:&#39; 2 7 11 10&#39;&#34;。 在查询数据时我通过&#34; roleid:7&#34;,但没有从查询返回的数据。请对此类型的scema定义进行建议,并选择查询更改(如果有的话,如IN子句或类似的东西)。

提前致谢.. 瓦苏。

2 个答案:

答案 0 :(得分:1)

您可以在fieldType

以下的roleid下面试试吗?
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      </analyzer>
      <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
      </analyzer>
</fieldType>

WhitespaceTokenizerFactory :简单的标记生成器,用于在空格上拆分文本流,并将非空白字符序列作为标记返回。

<field name="roleid" type="text_ws" indexed="true" stored="true" required="true" multiValued="false" />

在查询中,您可以搜索q=books:Apple&fq=(roleid:1 OR roleid:7)

注意:更新schema.xml后,请重新启动服务器并重新索引数据。

答案 1 :(得分:0)

在查询中发布值时,我们必须发布为$ roles = array(0 =&gt; 2,1 =&gt; 7,2 =&gt; 11,3 =&gt; 10); Solr查询解决我的问题...感谢所有