[groonga-dev,00699] TokenBigramSplitSymbolAlphaDigitを利用した場合の検索結果について

Back to archive index

Hirano hirano_verf****@mail*****
2012年 2月 21日 (火) 15:24:30 JST


お世話になっております。平野と申します。 

TokenBigramSplitSymbolAlphaDigitを利用した全文検索で、データによって検索が意図した結果になりません。

[環境] 
CentOS 5.5(x86_64) 
ruby 1.8.7(patchlevel 330) 
groonga 1.2.8
rroonga 1.3.0


検索語「to S」で検索を行うとデータによって
ヒットの有無が下記のようになります。

DBデータパターン1
to S(letter ver.)→ ヒット
to S《ラーメン》→ ヒット

DBデータパターン2
to S(letter ver.)→ ヒットしない
to S《ラーメン》→ ヒットしない
to S → ヒット


DBデータパターン2では3件ヒットすると思うのですが、実際は1件ヒットと
なってしまいます。
このような動作になる理由を教えていただけないでしょうか。
よろしくお願いいたします。


以下、検証で使用したソースコードです。
=====================================================
#!/usr/local/bin/ruby

require "rubygems"
gem "rroonga", "=1.3.0"
require "groonga"

$KCODE = "UTF-8"
STDOUT.sync = true

db_path = '/tmp/exam/test.db'
@table_name = 'search_word'

def do_search
	result = Groonga[@table_name].select do |record|
		record["word"] =~ 'to S'
	end

	result.each do |record|
		r = record.key
		puts r.word
	end
end


Groonga::Context.default_options = {:encoding => :utf8}
Groonga::Database.create(:path => db_path)

Groonga::Database.open(db_path) do |db|
	# DB作成
	Groonga::Schema.create_table(
									"ift_bigram",
									:type => :patricia_trie,
									:key_normalize => true,
									:key_type => "ShortText",
									:default_tokenizer => "TokenBigramSplitSymbolAlphaDigit")

	Groonga::Schema.create_table(@table_name, :type => :hash, :key_type => "ShortText") do |t|
		t.short_text("word")
	end
	
	Groonga::Schema.change_table("ift_bigram") do |t|
		t.index(@table_name + ".word")
	end

	# データ投入
	Groonga[@table_name].add("A", :word => "to S(letter ver.)")
	Groonga[@table_name].add("B", :word => "to S《ラーメン》")

	# 検索(1回目)
	puts "--- search No.1 ---"
	do_search

	# データ追加
	Groonga[@table_name].add("C", :word => "to S")

	# 検索(2回目)
	puts "--- search No.2 ---"
	do_search

end
=====================================================




groonga-dev メーリングリストの案内
Back to archive index