basic fits functionality in search

This commit is contained in:
Emi Matchu 2014-04-05 17:43:54 -05:00
parent acbec2ad5e
commit 0fe31ee79a
4 changed files with 44 additions and 2 deletions

View file

@ -29,6 +29,9 @@ ANCHORS:
user_id: <<user_id>> user_id: <<user_id>>
- term: - term:
owned: <<user_closet_hanger_ownership>> owned: <<user_closet_hanger_ownership>>
- &body_id_partial
term:
body_id: <<body_id>>
_names: _names:
*name_partial *name_partial
@ -60,6 +63,12 @@ _user_closet_hanger_ownerships:
_negative_user_closet_hanger_ownerships: _negative_user_closet_hanger_ownerships:
*user_closet_hangers_ownership_partial *user_closet_hangers_ownership_partial
_body_ids:
*body_id_partial
_negative_body_ids:
*body_id_partial
item_search: item_search:
- query: - query:
bool: bool:
@ -73,11 +82,13 @@ item_search:
- <<_occupied_zone_ids= ~>> - <<_occupied_zone_ids= ~>>
- <<_restricted_zone_ids= ~>> - <<_restricted_zone_ids= ~>>
- <<_user_closet_hanger_ownerships= ~>> - <<_user_closet_hanger_ownerships= ~>>
- <<_body_ids= ~>>
must_not: must_not:
- <<_negative_names= ~>> - <<_negative_names= ~>>
- <<_negative_species_support_ids= ~>> - <<_negative_species_support_ids= ~>>
- <<_negative_occupied_zone_ids= ~>> - <<_negative_occupied_zone_ids= ~>>
- <<_negative_restricted_zone_ids= ~>> - <<_negative_restricted_zone_ids= ~>>
- <<_negative_user_closet_hanger_ownerships= ~>> - <<_negative_user_closet_hanger_ownerships= ~>>
- <<_negative_body_ids= ~>>
sort: sort:
- name.<<locale>>.untouched - name.<<locale>>.untouched

View file

@ -51,6 +51,7 @@ class Item < ActiveRecord::Base
:species_support_id => self.supported_species_ids, :species_support_id => self.supported_species_ids,
:occupied_zone_id => self.occupied_zone_ids, :occupied_zone_id => self.occupied_zone_ids,
:restricted_zone_id => self.restricted_zone_ids, :restricted_zone_id => self.restricted_zone_ids,
:body_id => self.modeled_body_ids,
:name => {} :name => {}
} }

View file

@ -11,7 +11,8 @@ class Item
:occupied_zone_id => Fields::SetField, :occupied_zone_id => Fields::SetField,
:restricted_zone_id => Fields::SetField, :restricted_zone_id => Fields::SetField,
:name => Fields::SetField, :name => Fields::SetField,
:user_closet_hanger_ownership => Fields::SetField :user_closet_hanger_ownership => Fields::SetField,
:body_id => Fields::SetField
} }
FIELD_KEYS = FIELD_CLASSES.keys FIELD_KEYS = FIELD_CLASSES.keys
@ -94,6 +95,15 @@ class Item
end end
end end
[:_body_ids, :_negative_body_ids].each do |key|
if final_flex_params[key]
final_flex_params[key].each do |entry|
# These are pet types at first. Yikes, dem hax.
entry[:body_id] = entry[:body_id].body_id
end
end
end
result = FlexSearch.item_search(final_flex_params) result = FlexSearch.item_search(final_flex_params)
result.proxied_collection result.proxied_collection
@ -159,6 +169,19 @@ class Item
Item::Search.error 'not_found.ownership', :keyword => keyword Item::Search.error 'not_found.ownership', :keyword => keyword
end end
end end
},
:pet_type => lambda { |keyword|
name1, name2 = keyword.split('-')
[[name1, name2], [name2, name1]].each do |species_name, color_name|
species = Species.find_by_name(species_name)
next if species.nil?
color = Color.find_by_name(color_name)
next if color.nil?
pet_type = PetType.find_by_species_id_and_color_id(species, color)
return pet_type if pet_type.present?
end
Item::Search.error 'not_found.pet_type',
name1: name1.humanize, name2: name2.humanize
} }
} }
@ -172,6 +195,9 @@ class Item
ownership: lambda { |owned| ownership: lambda { |owned|
owned_key = owned ? 'owns' : 'wants' owned_key = owned ? 'owns' : 'wants'
I18n.translate("items.search.labels.user_#{owned_key}") I18n.translate("items.search.labels.user_#{owned_key}")
},
pet_type: lambda { |pet_type|
"#{pet_type.color.name}-#{pet_type.species.name}"
} }
} }
@ -179,7 +205,8 @@ class Item
:species_support_id => :species, :species_support_id => :species,
:occupied_zone_id => :zone, :occupied_zone_id => :zone,
:restricted_zone_id => :zone, :restricted_zone_id => :zone,
:user_closet_hanger_ownership => :ownership :user_closet_hanger_ownership => :ownership,
:body_id => :pet_type
} }
TEXT_FILTER_EXPR = /([+-]?)(?:(\p{Word}+):)?(?:"([^"]+)"|(\S+))/ TEXT_FILTER_EXPR = /([+-]?)(?:(\p{Word}+):)?(?:"([^"]+)"|(\S+))/

View file

@ -363,6 +363,8 @@ en:
ownership: ownership:
I don't know what user:%{keyword} means. Did you mean user:owns or I don't know what user:%{keyword} means. Did you mean user:owns or
user:wants? user:wants?
pet_type: We have no record of the %{name1} %{name2}.
It is spelled correctly?
not_logged_in: not_logged_in:
The "user" filters are only available if you're logged in. The "user" filters are only available if you're logged in.
flag_keywords: flag_keywords:
@ -377,6 +379,7 @@ en:
user_closet_hanger_ownership: user user_closet_hanger_ownership: user
user_owns: owns user_owns: owns
user_wants: wants user_wants: wants
body_id: fits
neopets_pages: neopets_pages:
create: create: