【问题标题】:Zend Lucene - cannot search numbersZend Lucene - 无法搜索数字
【发布时间】:2010-05-16 08:13:28
【问题描述】:

使用 Zend Lucene 我无法在描述字段中搜索数字

这样添加:

$doc->addField(Zend_Search_Lucene_Field::Text('description', $current_item['item_short_description'], 'utf-8'));

谷歌搜索显示应用以下代码应该可以解决问题,但它没有......:

Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive());

有什么想法吗?

【问题讨论】:

    标签: zend-framework lucene zend-search-lucene


    【解决方案1】:

    您必须设置默认分析器两次:在索引过程和搜索过程中。

    使用上面的代码行:

    Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive());
    

    【讨论】:

      【解决方案2】:

      你是在调用 Zend_Search_Lucene::open() 之前还是之后使用了那个命令?

      事先调用它肯定有效。

      【讨论】:

        【解决方案3】:

        我不确定“zend”,但要处理 lucene 中的数字,您需要使用以下技术:

        • 要将 int 放置到文档中,请使用以下命令:

          document.Add(new Field(FIELD_SPEC, NumberTools.LongToString(YOUR_INT), Field.Store.YES, Field.Index.UN_TOKENIZED));

        • 要定位值,请使用 Term(FIELD_SPEC, NumberTools.LongToString(YOUR_INT))

        【讨论】:

        • 如何使用它进行描述?我希望描述中的数字是可搜索的。我不只是有一个“单独的整数”。
        • @Pavel Dubinin - 看看我的笔记:“要定位值,请使用 Term:...”因此,当您需要搜索时,您可以将其创建为 BooleanQuery 的一部分,其中 Term 是使用 NumberTools 构建的。如果您使用标准查询解析器,则有点复杂 - 在这种情况下,通过用呈现的值 NumberTools 替换查询中的所有数字来进行预处理
        猜你喜欢
        • 2010-11-06
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多