Class: QueryHouse

Inherits:
Object
  • Object
show all
Defined in:
lib/common/query_house.rb

Overview

QueryHouse 以线上50w+的真实query集为基础,随机选出N条数据, 50w 是目前的数据量,欢迎对这个数据进行增加、删除、修改、优化, QueryHouse 支持随机读数据文件,所以不用担心数据量太大对程序照成性能或资源上的影响 :) QueryHouse 是一个单例类,使用时可以直接调用其静态方法

Constant Summary collapse

@@instance =
nil

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query_file) ⇒ QueryHouse

Returns a new instance of QueryHouse.



22
23
24
25
26
27
# File 'lib/common/query_house.rb', line 22

def initialize query_file
	raise "query.house[#{query_file}] not exist!" unless File.file? query_file
	@query_file = File.new query_file, "r"
	@byte_size = File.size @query_file
	#@size = @query_file.read.count "\n"
end

Class Method Details

.get_a_queryObject

功能:

随机取得一个query,静态方法哦!!!

参数解释:

  • return 一个query,String类型

  • raise 如果失败就抛异常

Example:

p QueryHouse.get_a_query #=> “gp超霸电池”



83
84
85
# File 'lib/common/query_house.rb', line 83

def self.get_a_query
	get_instance.get_a_rand_query
end

.get_instanceObject



17
18
19
20
# File 'lib/common/query_house.rb', line 17

def self.get_instance
	@@instance = new("#{$SUPER_ROOT}/data/query.house") unless @@instance
	@@instance
end

.get_n_query(n = 1) ⇒ Object

功能:

随机取得n个query,静态方法哦!!!

参数解释:

  • n query数量,默认为1

  • return query的数组

  • raise 如果失败就抛异常

Example:

p QueryHouse.get_n_query 3 #=> [“gp超霸电池”,“乔四爷的坑(4)”,“经典励志格言”]



64
65
66
67
68
69
70
71
# File 'lib/common/query_house.rb', line 64

def self.get_n_query n=1
	instance = get_instance
	arr = []
	n.times do 
		arr << instance.get_a_rand_query
	end
	return arr
end

Instance Method Details

#get_a_rand_queryObject

功能:

随机取得一个query,一般情况请使用get_query静态方法

参数解释:

  • return 返回一个随机query,String类型,

  • raise 如果失败就抛异常

Example:

qs = QueryHouse.get_instance p qs.get_a_rand_query #=> “gp超霸电池”



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/common/query_house.rb', line 41

def get_a_rand_query
	# 最多尝试3次
	3.times do
		@query_file.seek rand(@byte_size)
		# 跳过seek所在的一行
		@query_file.gets
		line = @query_file.gets
		return line.rstrip.force_encoding("gbk") unless line.nil?
	end
	raise "Sorry! I can't get any query from file[#{@query_file}]"
end