数据库上的数据库查询匹配拆分为无序类别

时间:2017-12-01 00:35:45

标签: mysql postgresql spring-data hql

在DB结果中查找的最佳方法是只提供字符串,该字符串可以包含随机顺序名称,姓氏,描述,电话,ID

我还想确保查询参数的所有值都用于任何选定的行。

示例:

public void SetReadOnly(bool readOnly)
{
    foreach (TabPage tab in tabControl.TabPages)
    {
        foreach (Control c in tab.Controls)
        {
             if (c is TextBox)
             {
                 ((TextBox)c).ReadOnly = readOnly;
             }
             else
             {
                 // All controls support this property
                 c.Enabled = !readOnly;
             }
        }
    }
}

查询 - >结果:

  • +--------+---------+-------------+----------+-----+ | Name | Surname | Description | Phone | Id | +--------+---------+-------------+----------+-----+ | John | Doe | Tall | 12345678 | 123 | | Taylor | Doe | Short | 45678913 | 234 | | Taylor | Joe | Short | 45678913 | 345 | +--------+---------+-------------+----------+-----+ - > John Doe和Taylor Joe
  • Jo - > John Doe,Taylor Doe和Taylor Joe
  • Ta Do - > Taylor Doe
  • Taylor 234 - > John Doe和Taylor Doe
  • Doe 23 - >约翰·多伊
  • Doe 123 - >

我需要在HQL中进行查询,但我相信任何关系数据库语言的解决方案都会对我有所帮助。

@edit如果你投票,请评论为什么(坏标签?没有可能的解决方案?)

1 个答案:

答案 0 :(得分:2)

解决方案很简单,因为它不令人满意。使用像这样的where子句创建一个查询

WHERE (columnA like '%value1%' 
    OR columnB '%value1%') 
AND (columnA '%value2%' 
    OR columnB '%value2%')
AND (...
) ...

包含您要搜索的所有列组合以及您拥有的值。

使用Spring Data,您可能希望使用Specification来执行此操作。您可以创建一个方法,通过获取查询字符串,将其分割为空格并迭代结果,创建与上述查询条件等效的Specification

请注意,这将非常慢,因为它无法使用任何正常索引。

但实际上你正在使用错误的工具来完成工作。如果这是您需要实施的事情之一,那就没关系。一个更好的工具是像Lucene这样的搜索引擎,或者可能是text search features in your database。要将其与JPA集成,请参阅How to use MySQL's full text search from JPA

如果你考虑一个完整的搜索引擎,你可以考虑Spring Data Elastic Search