【问题标题】:Search phrase through SOLR multivalued field通过 SOLR 多值字段搜索词组
【发布时间】:2018-06-06 14:23:00
【问题描述】:

我正在实施 SOLR 搜索。当我输入“abc def”时,我想获取所有包含“abc def”的段落。例如,如果我有这些段落。

{
    "paragraphs": ["abc def. bdbdbdbdbd, aa", "abd efe"]
},
{   
    "paragraphs": ["xyzabc def xyz", "fgh xx", "abcdef", "wwwabc defxxx"]
}

我想从第一个获取数据。完全匹配这个词组,所以不是另一个词组的一部分。如果我搜索“god dog”,则结果中不应包含“god doggo”。

问题是当我尝试使用查询 paragraphs : "abc def" 时,我得到空结果。

这是我的 schema.xml 的一部分:

  <field name="paragraphs" type="text" indexed="true" stored="true" required="true" multiValued="true"/>
  <types>
    <fieldType name="text" class="solr.TextField" sortMissingLast="true" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true">
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>
</types>

我尝试使用 StandardTokenizerFactory 而不是 KeywordTokenizerFactory 但结果是一样的。我可以使用(*abc*) 获取数据,但这也会返回xabcz 之类的元素,我对此不感兴趣。

【问题讨论】:

    标签: solr


    【解决方案1】:

    您必须删除 KeywordTokenizer - 这会将整个存储的文本保留为单个标记。

    使用 WhitespaceTokenizer 或 StandardTokenizer 应该可以工作,请记住,您必须在以任何方式更改分析链后重新索引(除非您只是更改内容处理查询的方式)。

    使用默认动态字段*_txt(定义为仅删除小写和停用词的 StandardTokenizer),并为您的两个文档编制索引:

    q=*:*

    "response":{"numFound":2,"start":0,"docs":[
        {
            "paragraphs_txt":["abc def. bdbdbdbdbd, aa",
              "abd efe"],
            "id":"d696c435-2267-442d-9abe-ea754793d5cf",
            "_version_":1602547400543567872},
        {
            "paragraphs_txt":["xyzabc def xyz",
              "fgh xx",
              "abcdef",
              "wwwabc defxxx"],
            "id":"09bbba7c-b407-403c-9771-582ef23f6b56",
            "_version_":1602547400598093824}]
    }}
    

    q=paragraphcs_txt:"abc def"

    "response":{"numFound":1,"start":0,"docs":[
        {
            "paragraphs_txt":["abc def. bdbdbdbdbd, aa",
              "abd efe"],
            "id":"d696c435-2267-442d-9abe-ea754793d5cf",
            "_version_":1602547400543567872}]
    }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-02
      • 2017-06-10
      • 2015-10-03
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多