我对SQL查询没有太多的经验,因此在寻找问题的解决方案时遇到了一些麻烦。
我有书签列表,例如:Facebook的,开发者控制台,堆栈溢出......我也有自己的URL列表:http://m.facebook.com,https://market.android.com。
..
我试图让用户搜索这2个列表并显示任何相似的结果,例如-如果用户搜索了“脸部”,我希望他获得“
Facebook”。并且,如果用户搜索“市场”(针对market.android .. URL),他将获得“开发者控制台”。
这是我的SQL WHERE子句:
String where = Browser.BookmarkColumns.TITLE + " LIKE ? OR "
+ Browser.BookmarkColumns.URL + " LIKE ?";
where = "(" + where + ") AND " + Browser.BookmarkColumns.BOOKMARK + " == 1";
它工作正常,但只能找到完整的字符串(例如:要找到“ Facebook”,我必须搜索“ Facebook”或“ facebook”)。
希望对此有所帮助!
谢谢,Lior
更新:
相关代码:
//search
String[] selArgs = new String[] { query };
String where = Browser.BookmarkColumns.TITLE + " LIKE '%" + query + "%' OR "
+ Browser.BookmarkColumns.URL + " LIKE '%" + query + "%'";
where = "(" + where + ") AND " + Browser.BookmarkColumns.BOOKMARK + " == 1";
cur = managedQuery(BOOKMARKS_URI, projection,
where, null, Browser.BookmarkColumns.VISITS + " DESC");
Logcat堆栈跟踪:
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): FATAL EXCEPTION: main
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): java.lang.RuntimeException: Unable to start activity ComponentInfo{PACKAGE}: android.database.sqlite.SQLiteException: unrecognized token: "'%face%) AND bookmark == 1) ORDER BY visits DESC": , while compiling: SELECT _id, title, url, visits, favicon, thumbnail, touch_icon, _id AS _id FROM bookmarks WHERE ((title LIKE '%face%' OR url LIKE '%face%) AND bookmark == 1) ORDER BY visits DESC
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.os.Handler.dispatchMessage(Handler.java:99)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.os.Looper.loop(Looper.java:130)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.main(ActivityThread.java:3835)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at java.lang.reflect.Method.invokeNative(Native Method)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at java.lang.reflect.Method.invoke(Method.java:507)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at dalvik.system.NativeStart.main(Native Method)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): Caused by: android.database.sqlite.SQLiteException: unrecognized token: "'%face%) AND bookmark == 1) ORDER BY visits DESC": , while compiling: SELECT _id, title, url, visits, favicon, thumbnail, touch_icon, _id AS _id FROM bookmarks WHERE ((title LIKE '%face%' OR url LIKE '%face%) AND bookmark == 1) ORDER BY visits DESC
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.content.ContentResolver.query(ContentResolver.java:271)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.Activity.managedQuery(Activity.java:1550)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at PACKAGE.doMySearch(APPNAME.java:725)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at PACKAGE.onCreate(APPNAME.java:150)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
您可以尝试以下方法:
String where = Browser.BookmarkColumns.TITLE + " LIKE '%" + x +"%' OR "
+ Browser.BookmarkColumns.URL + " LIKE '%" + x +"%'";
where = "(" + where + ") AND " + Browser.BookmarkColumns.BOOKMARK + " == 1";
其中x是用户插入的文本,即face。
希望这可以帮助!
问题内容: 我正在尝试在整个Oracle数据库中查找特定的字符串。 我已经在此处的另一个主题(在所有表中的所有字段中搜索特定值(Oracle))中遵循了该示例,并且当字符串是一列中的整个值时,它就可以正常工作。但是我需要搜索字符串作为列的一部分。 例如,如果我搜索“ Alert”,则应返回所有带有“ Alert”的列和所有带有“ Alert_QB”的列 这是当前的查询: 我认为它靠近“使用’ALE
问题内容: 我正在发送此请求 我得到正确的结果 但是当我想按单词部分搜索时,例如 我没有得到任何结果: 我究竟做错了什么? 问题答案: 这是因为您的字段可能已由标准分析器(默认设置)进行了分析,并且标题已被标记为三个标记,并且。 为了搜索单词的任何子串,您需要创建一个自定义分析器,该分析器利用ngram令牌过滤器来索引每个令牌的所有子串。 您可以这样创建索引: 然后,您可以重新索引数据。这将使标题
我的Sql查询不正确。我想创建一个查询,搜索前三个字符等于给定参数的公司 我的错误:
因此,默认情况下,field1是通过使用默认分析器进行弹性搜索来分析的。 我在下面搜索短语查询,但它没有返回任何结果。 因此弹性搜索短语查询不适合于OR运算符。知道为什么它不起作用吗?它是弹性搜索的一个限制,因为文本中有特殊的字符连字符(-)?
问题内容: 我试图在mySQL的整个表中搜索一个字符串。 我想搜索表的所有字段和所有主菜,返回包含指定文本的每个完整条目。 我不知道如何轻松地搜索多个字段。详细信息如下: 该表是“客户端”。它具有大约30个字段和800个条目,太多了以至于无法在浏览器中一次全部显示。我想搜索的域名(即“玛丽”),但它可能是在或,或字段等 我想在所有字段中搜索包含字符串“ Mary”的所有条目。我认为这应该可行,但不
实现此功能的推荐方法是什么?注意,我使用的是查询字符串查询。