6 返信 最新の回答 日時: Apr 20, 2011 5:08 PM ユーザー:和宏佐々木

    検索トラブルを解消したい

    和宏佐々木

      タイトル

      検索トラブルを解消したい

      フォーラムに投稿

      出版物データベースを社内でカスタムWeb公開しており、業界上の要請に従って

      各著者の姓と名を半角スペースで区切って登録しています(変えられません)。

      最初にぶつかった問題は、半角スペース混じりの検索ができないことでした。

      これだけでもデータベースとしておかしいと感じますが、仕方がないので

      TrimAll 関数を使って半角スペースを詰めて、検索用フィールドをつくりました。

      ところが今度は全角の「ー」(音引き)が半角ハイフンに勝手に変換されてしまいます。

      さらなる改善策として、TrimAll の代わりに substitute を使って

      半角スペースを詰めることを予定(未実施)していますが、もし半角ハイフンへの

      誤変換が解消されるなら、TrimAll を使いたいのです。いい方法はないものでしょうか。

        • 1. Re: 検索トラブルを解消したい
          和宏佐々木

          質問者からの補足ですが、関数の話なので

          FileMaker Server 関連というより

          FileMakerPro 関連の質問にしたほうが

          よかったかもしれません。慣れていないもので、ご了承ください。

          • 2. Re: 検索トラブルを解消したい
            honda

            バージョンもプラットフォームも書かれていないので、的外れかも知れません。

            > 半角スペース混じりの検索ができない
            混じりの意味にもよりますが、半角スペースが含まれるレコード(ex"山田 太郎")が半角スペースを含まないクエリ(ex"山田太郎")によって抽出できないという事であれば、おかしくありません。半角スペースを取り除いたインデックスが必要です。

            半角スペースを含んだクエリがそもそも機能しないとしたら、インデックスが壊れているかも知れません。壊れていた場合、再生成が必要です。

            違うとは思いますが、もしもスペース区切りによるand検索を指しているのであれば、通常カスタムWebのPHPなりの側に自前で実装するものです。半角スペースをand条件として勝手に展開する方がおかしいです。

            > 全角の「ー」(音引き)が半角ハイフンに勝手に変換
            手元のFileMakerで試しましたが、確認できません。TrimAllにはオプションがありますが、実際のコードではどんな指定になっていますか? 色々なオプションで使った経験はありますが、TrimAll()で長音記号が半角ハイフンに変換されてしまう様なケースは、見たことがありません。

            • 3. Re: 検索トラブルを解消したい
              和宏佐々木

              まずは t.honda 様、書込みを有難うございます。励みになります。

              めざしていることは、当初は半角スペースを含む「山田 太郎」さんの検索でしたが、

              この課題については、関数フィールドを用いて「山田太郎」として検索することで解決しています。

              現在の差し迫った悩みは、その弊害として発生した、全角音引きを含む著者、

              たとえば「シャーリー」さんの著書を検索できなくなっていることです。

              半角スペース区切りによるかけあわせ検索は、考えておりません。

              TrimAll の指定は、こんなふうでした。(person_name_1 が著者)

              TrimAll(person_name_1; 0; 2)

              なお、実際には著者の項目は 3名分あり、またその 3名については

              全角スペースで区切ることが表示上適切であるため、実際には次のような指定でした。

              TrimAll(person_name_1; 0; 2) & " " & TrimAll(person_name_2; 0; 2) & " " & TrimAll(person_name_3; 0; 2)

              さて、いずれにせよ、全角音引きの字化け問題は、TrimAll を Substitute 関数に

              代替することで解消すると思っていたのですが、今朝試したらここでも同じ字化けが発生しました!

              現在の指定は、次のようなものです。

              Substitute(person_name_1;  " "; "") & " " & Substitute(person_name_2; " "; "") & " "  & Substitute(person_name_3; " "; "")

              バージョンは FileMaker Server 11、元データベースの作成には

              FileMaker Pro 11 Advanced を使っています。

              プラットフォームは、Windows Server 2003 standard SP2 です。

              どうぞ t.honda 様以外の他の方も含め、いい知恵をお貸しください。

              • 4. Re: 検索トラブルを解消したい
                和宏佐々木

                質問者から補足ですが、FileMaker API for PHP による

                カスタム Web 公開をしています。どうぞよろしくお願いいたします。

                • 5. Re: 検索トラブルを解消したい
                  honda

                  少なくとも、TrimAll()やSubstitute()だけで、全角の長音記号「ー」が半角ハイフン「-」に置き換わってしまう事は考えられません。何か他の要因があるか、FileMakerそのもののバグが無ければ。

                  Advancedをお持ちなので、例えば以下の計算式をデータビューアの監視対象式に追加すると、結果はどうなりますか?


                  Substitute("リチャード ドーキンス"; " "; "" )

                  もしその結果でも、長音記号が半角ハイフンに置き換わっているとすれば、FileMaker或いはそれより下の環境に、何か大きな問題がある筈です。

                  もしその結果では、長音記号がそのまま残っているのならば、Substitute()そのものではなく、作成したシステムの他の部分に問題がある筈です。例えば、作成したインデックスデータを取り扱うフローの各所や、フィールドの自動入力、スクリプトトリガ。そういった部分で、何かが問題の変換処理を行ってしまっているのだと思います。

                  • 6. Re: 検索トラブルを解消したい
                    和宏佐々木

                    質問者です。t.honda 様、皆様、

                    サーバーなので朝しか止められず、報告遅くなりましたが、自力解決しました。

                    方法は、問題の計算フィールドと同様のものをもう1つ作り、元の計算フィールドを削除、

                    作った計算フィールドを元の計算フィールドの名前に合わせる、これだけです。

                    FileMaker Pro の修復(インデックス含む)では効果がなく、

                    上記で初めて奏功しましたが、t.honda 様のコメントにありましたように

                    インデックスに問題があったのではと感じています。

                    なお、現状は Substitute ではなく TrimAll を使っています。

                    (英字綴りの場合、TrimAll のほうが不用意なスペース詰めがないからです)

                    「リチャード ドーキンス」のテストですが、修復前でも「リチャードドーキンス」と表示されました。

                    教訓があるとしたら、過度に FMPro のインデックス修復を頼りにしない、ということでしょうか。

                    どうもお騒がせしました <(_ _)>