通过SOLR多值字段搜索短语

时间:2018-06-06 14:23:00

标签: solr

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

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

我想从第一个获取数据。完全匹配此词组,因此不是另一个词组的一部分。如果我搜索“神狗”短语“神狗狗”不应该包含在结果中。

问题是当我尝试使用查询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等元素,我对此不感兴趣。

1 个答案:

答案 0 :(得分: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}]
}}