【问题标题】:multiple search fields多个搜索字段
【发布时间】:2010-04-14 19:12:22
【问题描述】:

如果我有 20 个或更多的搜索字段并且任何组合都应该是有效的,那么最好的方法是什么。有没有什么特殊的方法可以在 openJPA 或原生 SQL 中做到这一点更好。任何想法都会有所帮助。谢谢。

【问题讨论】:

  • 您需要搜索 20 多个字段中的任何一个,这将使您的查询中使用索引变得困难,这将导致搜索缓慢

标签: java sql openjpa


【解决方案1】:

您可以在存储过程或参数化 SQL 语句中尝试类似的操作。这样即使只有少数有值,您也可以传入所有字段。

@param1 varchar(25),
@param2 int,
@param3 varchar(10),
@param4 char(1)

SELECT column1, column2, column3, column4
FROM TABLE
WHERE (column1 = @param1 OR @param1 IS NULL)
AND (column2 = @param2 OR @param2 IS NULL)
AND (column3 = @param3 OR @param3 IS NULL)
AND (column4 = @param4 OR @param4 IS NULL)

【讨论】:

    【解决方案2】:

    我认为您可能想要使用“Hibernate Search”之类的东西,它将全文搜索引擎的强大功能带入 DB 模型。因此,您可以提供类似 google 搜索的功能来执行客户想要执行的任何搜索组合。

    我开发了一个带有 GUI 的演示应用程序来测试各种查询类型。

    退房 - http://code.google.com/p/hb-search-demo/

    【讨论】:

      【解决方案3】:

      我相信使用标准 api 是最好的方法。

      请阅读该链接并检查您自己的:

      http://openjpa.apache.org/builds/2.0.0-beta3/apache-openjpa-2.0.0-beta3/docs/manual/jpa_overview_criteria.html

      【讨论】:

        【解决方案4】:

        我不喜欢通过 SQL 运行全文搜索。对于喜欢使用像 Solr 这样的搜索引擎的东西。

        http://lucene.apache.org/solr/

        其功能概述:

        http://lucene.apache.org/solr/features.html

        【讨论】:

          猜你喜欢
          • 2021-08-05
          • 2015-06-17
          • 2012-10-21
          • 2018-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-19
          • 2021-07-13
          相关资源
          最近更新 更多