2

私はsqliteを使用してチャットボットアプリを開発しています。チャットボットは人間対人間のチャットをシミュレートするプログラムです! 私のアプリでは、ユーザーが入力として何かを入力し、それを Java および SQLite クエリの変数として使用します。たとえば、次のテーブルを検討してください。

ID - ユーザー - チャットボット

1 - どのように - どのように知ることが重要ですか
2 - お元気ですか - 私は元気です

私はこのコードを使用してDBから適切な回答を取得します:

cursor = db.rawQuery("SELECT chatbot FROM sentence"+ 
                     " WHERE ? LIKE '%' || " + USER + " || '%'"
                      ,new String[] { newMessage });

このコードはほとんどの場合うまく機能しますが、次のような場合は機能しません: ユーザーが入力を入力するとき、お元気ですか? 正しい回答である「私は元気です」を選択しますが、残念ながら「方法を知ることは重要ですか?」も選択します。 、

このコードを使用して、ユーザー列の最大長を持つレコードのみを選択しました。

cursor = db .rawQuery( "SELECT shompet FROM sentence" +
                 "WHERE LENGTH(user) = SELECT MAX(LENGTH(user)) from sentence "
                 + " WHERE ? LIKE '%' || " + USER + " || '%'", new String[] {
                 newMessage });

しかし、シミュレーターで実行すると、閉じてこの「アプリが停止しました」と表示されます。構文エラーがあると思います。

あなたのアドバイスを待って、この構文を修正するか、この問題を処理する別の方法を教えてください!

4

2 に答える 2

4

このような内部クエリを利用する必要があります。

SELECT chatbot, user
FROM sentence
WHERE LENGTH(user) = (
  SELECT MAX(LENGTH(user))
  FROM sentence
  WHERE 'not exactly' LIKE '%' || user || '%'
) AND 'not exactly' LIKE '%' || user || '%'

SQL フィドル出力:

+------------+-------------+
|  CHATBOT   |    USER     |
+------------+-------------+
| why not    | not exactly |
+------------+-------------+

cursorしたがって、 asを作成する必要があります

cursor = db.rawQuery("SELECT chatbot FROM sentence " + 
                     "WHERE LENGTH(user) = ( " +
                     " SELECT MAX(LENGTH(user)) FROM sentence " +
                     "  WHERE ? LIKE '%' || " + USER + " || '%' " +
                     ") AND ? LIKE '%' || " + USER + " || '%' ",
                     new String[] { newMessage, newMessage });
于 2013-08-24T15:20:52.527 に答える
1

アプリケーションが大きくなると、単純な SQL が混乱する可能性があります。

  • ユーザー入力がありません
  • 複数の一致

だから私はこれを提案します

テーブル: インデックス (id,values-unique)

表: クエスト(qid,インデックス)

表: ans(qid,aid,text)

  indices
-------------
id     values
1      how
2      are
3      you



 quest
-------------
qid    ids
1      1,2,3
2      1



ans
-------------
aid qid text
1   1   it is...
2   2   i am...

  1. 入力: ユーザーテキスト
  2. パーツに分解する
  3. インデックスを取得 (インデックス テーブルからの id)
  4. 検索クエストテーブル
  5. ルックアップ ans テーブル
于 2013-08-24T17:32:48.743 に答える