【问题标题】:Doctrine fulltext on multiple field多领域的学说全文
【发布时间】:2016-03-22 15:44:08
【问题描述】:

我有一个具有一些属性的实体,我想为其中的一些属性建立索引以获取全文。

* @Index(name="search", columns={"description", "short_description", "name"}, flags={"fulltext"})})

现在,如果我使用 MATCH(description, short_description) AGAINST (...) 执行查询,我会得到:

找不到与列列表匹配的 FULLTEXT 索引

如果我只为全文索引一列:

 * @Index(columns={"description"}, flags={"fulltext"})})

然后尝试使用 MATCH(description) AGAINST (...) 一切正常。
那么如何索引多个列呢?

谢谢。

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    我找到了我的问题的解决方案,所以我将它发布给有同样问题的人。
    我索引了三列:

    * @Index(name="search", columns={"description", "short_description", "name"}, flags={"fulltext"})})
    

    所以我必须在我的查询中使用所有这些:

    MATCH(description, short_description, name) AGAINST (...)
    

    我不能只匹配其中一些索引。
    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      您应该能够在索引属性中插入多个索引。

      /**
       * @Entity
       * @Table(name="table",indexes={@index(name="foo_index", columns={"foo"}),@index(name="bar_index", columns={"bar"})})
       */
      

      请注意,Doctrine2 ORM 不支持MATCH AGAINST 并且全文搜索的性能变得非常糟糕,即使在某些情况下可能也是如此。

      当有很多请求和性能很重要时,您应该看看基于 Lucene 的搜索服务器,例如 Elasticsearch 或 Apache Solr。

      【讨论】:

      • 这样我做不到:MATCH(foo, bar) AGAINST (...) 正如我所问的那样。我只能做 MATCH(foo) AGAINST (...) , MATCH(bar) AGAINST (...)
      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 2014-04-05
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      相关资源
      最近更新 更多