Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2008-02-04 11:12:35

PUSHMAN
メンバー
登録日: 2004-08-15
投稿: 60
ウェブサイト

Re: 検索結果の正確さ

お世話になっております。

最近気がついたのですが、
短い単語で検索したとき、検索結果に出てこない場合があります。

例えば僕のサイトで
「芸術派」http://blog.heartfield-web.com/?amount= … 3%E6%B4%BE
「芸術」http://blog.heartfield-web.com/?amount= … 8%E8%A1%93
「術派」http://blog.heartfield-web.com/?amount= … 3%E6%B4%BE
で検索した場合、「術派」では検索結果に該当記事は無い事になります。

こんな変な言葉で検索する事はないと思いますが、他にも検索にひっかからない場合があるようです。

例えば「賛否両論」と「知識不足」という言葉を含む記事があるのですが、
「賛否両論」ではひっかかっても、
「知識不足」では該当記事無しになります。

検索結果の表示には「NP_ExtensibleSearch」を利用していますが、
Nucleus標準の「<%searchresult%>」を使用しても結果はかわりませんでした。
日本語を扱う時はこういうことは回避できない事なのでしょうか?


マーカーのドラッグ&ドロップでGoogle Mapsの緯度経度を測定|Geocoder
http://geocoder.heartfield-web.com/

What's so bad about feeling good?
http://blog.heartfield-web.com/

オフライン

#2 2008-02-04 15:39:48

yu
メンバー
From: 神奈川
登録日: 2003-11-15
投稿: 718
ウェブサイト

Re: 検索結果の正確さ

DBまわりの環境によると思いますが、
たとえばMySQL側はバージョン3.x~4.0、
Nucleus側はUTF-8だったりしませんか?

MySQLは4.1になるまでUTF-8を公式サポートしてなかったようなので、
このへんが絡んでるのかもしれません。

僕は昔UTF-8版Nucleusを MySQL4.0 ujis(EUC-JP)のDBでうっかり使い続けてたことがあります。
(それでも文字化けはなかったので気づかなかった・・)
Nucleusの事例ではないですが、一応それ絡みのブログ記事を書いてたので貼っておきます。

http://blog.datoka.jp/item/842


Nucleusだとか
http://nucleus.datoka.jp/

オフライン

#3 2008-02-04 17:07:46

PUSHMAN
メンバー
登録日: 2004-08-15
投稿: 60
ウェブサイト

Re: 検索結果の正確さ

yuさん

ご返信ありがとうございます。

ご指摘の通り、
MySQL 4.0系とNucleus UTF-8という環境でした。
もちろんMySQL内部はEUC-JPです…

yuさんのサイトをはじめ、
いろいろ調べてみましたが、
これはもうどうしようも無いみたいですね…

猛烈に悲しい気分ですが、
それがわかっただけでも大変助かりました。
ありがとうございます。


マーカーのドラッグ&ドロップでGoogle Mapsの緯度経度を測定|Geocoder
http://geocoder.heartfield-web.com/

What's so bad about feeling good?
http://blog.heartfield-web.com/

オフライン

#4 2008-02-06 08:48:24

PUSHMAN
メンバー
登録日: 2004-08-15
投稿: 60
ウェブサイト

Re: 検索結果の正確さ

PHP、MySQLともに知識が乏しいのでとても不安なのですが、
とりあえず解決しましたのでご報告です。

/nucleus/libs/SEARCH.php

の246、253、258、263行目の
「LIKE」

「LIKE BINARY」
と修正しました。

参考にしたのは下記サイトです。

#1029 (MySQL4.0環境で日本語検索が動作しない) - OpenPNE - Trac
http://trac.openpne.jp/ticket/1029

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.2.1 文字列比較関数
http://dev.mysql.com/doc/refman/4.1/ja/ … tions.html

眠るシーラカンスと新米プログラマー:文字化け? MySQLのマルチバイト処理? - livedoor Blog(ブログ)
http://blog.livedoor.jp/coelacanth_blog … 27037.html

mysql:7140
http://www.mysql.gr.jp/mysqlml/mysql/msg/7140

いまのところ不具合は無いような気がするのですが、
いかんせん知識不足で少々不安です。
もしなにかお気づきの点がございましたら、
ご指導よろしくお願いします。


マーカーのドラッグ&ドロップでGoogle Mapsの緯度経度を測定|Geocoder
http://geocoder.heartfield-web.com/

What's so bad about feeling good?
http://blog.heartfield-web.com/

オフライン

#5 2008-02-06 10:18:07

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: 検索結果の正確さ

これって、もしかしてすごく嬉しい事なような気がします wink

問題なければ取り込みですね!


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#6 2008-02-06 11:23:33

yu
メンバー
From: 神奈川
登録日: 2003-11-15
投稿: 718
ウェブサイト

Re: 検索結果の正確さ

おお、BINARY演算子は気づきませんでした。
これは修正が簡単でいいかも。

実際に試してないですが、MySQLマニュアルを読む限りケース依存になってしまう副作用はあるみたいです。
(英文字の話ですが、通常は"nucleus"で"Nucleus"もヒットするけど、LIKE BINARYだとヒットしなくなる)

MySQLのバージョンをチェックして、このへんの挙動を変更できるような
コードって書けないですかね?

追記:
あ~でも、DBとNucleusの文字コードが違うという状況の話なので
改造パッチ扱いのままのほうがいいかもしれません。


Nucleusだとか
http://nucleus.datoka.jp/

オフライン

#7 2008-02-06 13:28:23

PUSHMAN
メンバー
登録日: 2004-08-15
投稿: 60
ウェブサイト

Re: 検索結果の正確さ

ご返信ありがとうございます。

確かに大文字と小文字で検索結果が変わりました…
あちらを立てればこちらが立たず、ですね。

フォーム付近に注意書きして対応します。
しかし、あと一歩って感じが悔しいです :?


マーカーのドラッグ&ドロップでGoogle Mapsの緯度経度を測定|Geocoder
http://geocoder.heartfield-web.com/

What's so bad about feeling good?
http://blog.heartfield-web.com/

オフライン

#8 2008-02-07 06:55:48

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: 検索結果の正確さ

" (i.$match_a[$ith] LIKE '%"

を、

" (i.$match_a[$ith] LIKE ".( preg_match('/[a-zA-Z]/',$key_a[$kn]) ? '' : 'BINARY' )." '%"

でどうでしょうか。

オフライン

#9 2008-02-07 08:42:54

PUSHMAN
メンバー
登録日: 2004-08-15
投稿: 60
ウェブサイト

Re: 検索結果の正確さ

ご返信ありがとうございます。

すばらしいです。大成功です。

ただ、246行目だけは

" (i.$match_a[$ith] LIKE ".( preg_match('/[a-zA-Z]/',$key_a[0]) ? '' : 'BINARY' )." '%"

とする必要がありました。

日本語と数字は「BINARY」あり。
英字の時は「BINARY」なし。
混在しているときも同様で、
まったく問題なさそうです。

ただ、ある種の記号
「#^()[];:<>?」
なんかはエスケープ処理されていますが、
これはこれでいいんですよね?

とても助かりました。
本当にありがとうございます。

【追記】
すみません、エスケープ処理ではありません。
検索文字列から削除されています。


マーカーのドラッグ&ドロップでGoogle Mapsの緯度経度を測定|Geocoder
http://geocoder.heartfield-web.com/

What's so bad about feeling good?
http://blog.heartfield-web.com/

オフライン

#10 2008-02-07 15:32:08

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: 検索結果の正確さ

うまく行きましたか。良かったです。この変更なら、MySQLの設定がちゃんとしているケースでも問題ないですね。むしろ、日本語の検索をバイナリで行うことで、スピードがアップするかもしれません。

3.32 にどうでしょうね。>>Kimitakeさん

オフライン

#11 2008-02-07 15:50:23

PUSHMAN
メンバー
登録日: 2004-08-15
投稿: 60
ウェブサイト

Re: 検索結果の正確さ

Katsumiさん、ほんとにありがとうございます。
嬉し過ぎて、軽く興奮しております。

ところで

日本語と数字は「BINARY」あり。
英字の時は「BINARY」なし。
混在しているときも同様で、
まったく問題なさそうです。

と書きましたが、
英字と全角文字をくっつけて検索した場合は
「BINARY」無しで検索してましたので、
また結果がおかしくなるかもしれません。

ただ、いろんな組み合わせを自サイトで試してみましたが、
今のところは大丈夫でした。


マーカーのドラッグ&ドロップでGoogle Mapsの緯度経度を測定|Geocoder
http://geocoder.heartfield-web.com/

What's so bad about feeling good?
http://blog.heartfield-web.com/

オフライン

#12 2008-02-07 15:57:53

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: 検索結果の正確さ

『英数字が入っている』で判断するより、『日本語が入っている』で判断した方がいいかもしれないということですよね。

なら、

preg_match('/[\x80-\xFF]/',$key_a[0]) ? 'BINARY' : ''

の様な感じでどうでしょうか。

オフライン

#13 2008-02-07 16:24:00

PUSHMAN
メンバー
登録日: 2004-08-15
投稿: 60
ウェブサイト

Re: 検索結果の正確さ

変更してみましたが、
結果は特に変わらなさそうでした。

今回の検証で、
現在一番新しい記事に含まれる

Nucleusフォーラム「NP_OnlyImg

を検索文字列にしたのですが、
どちらの場合も検索結果に反映されませんでした…

試しにいろんなところで区切ってみました。

Nucleusフォーラム「NP_OnlyImgで画像をそのまま抽出(高さを含めて)。」

該当無し。

「NP_OnlyImgで画像をそのまま抽出(高さを含めて)。」

該当無し。

NP_OnlyImgで画像をそのまま抽出(高さを含めて)。

該当有り。

NP_OnlyImgで画像をそのまま抽出(高さを含めて)。」

該当無し。

Nucleusフォーラム「NP_OnlyImg

該当無し。

他にも試してみましたが、
記号の類いが混じると駄目な場合があるみたいです。
ただ、大丈夫な時もあり、
僕では規則性は確認できませんでした。


マーカーのドラッグ&ドロップでGoogle Mapsの緯度経度を測定|Geocoder
http://geocoder.heartfield-web.com/

What's so bad about feeling good?
http://blog.heartfield-web.com/

オフライン

#14 2008-02-08 16:14:25

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: 検索結果の正確さ

なるほど、不規則ですね。なら、やはり /[a-zA-Z]/ でマッチにしておくのがよいかもしれません。

時間が取れれば、SEARCH クラスを眺めてみます。

オフライン

Board footer