我有以下情况:
我有一个人的默认字段如:姓名,名字,电话,电子邮件,......
一个人有很多语言技能,languageskill实体有以下几个领域:语言,口语,写作,理解,Mothertongue
一个人有很多经验,包括字段:办公室,描述,期间,位置
我如何用Lucene.net索引这样的东西?
可以进行以下搜索:
- FirstName:"Arno" AND LanguageSkill:(Language:"Dutch" AND Speaking:[3 TO 5])
- FirstName:"Arno" AND WorkExperience:(Description:"Marketing")
- FirstName:"Arno" AND WorkExperience:(Description:"Marketing" OR Description:"Sales")
- FirstName:"Arno" AND WorkExperience:(Description:"Programmer") AND LanguageSkill:(Language:"English" AND Speaking:[3 TO 5] AND MotherTongue:"true")
在Lucene中这样的事情是否可行,我已经尝试过将我的关系弄平,文档看起来像这样:
Name:"Stallen"
FirstName:"Arno"
WorkExperience:"Office=Lidl Description=Sales Location=London"
WorkExperience:"Office=Abro Description=Programmer Location=London"
LanguageSkill:"Language=Dutch Speaking=3 Writing=1 Understanding=3"
LanguageSkill:"Language=Egnlish Speaking=5 Writing=4 Understanding=5 MotherTongue=true"
答案 0 :(得分:1)
“如果你拥有的只是锤子,一切看起来像钉子”
您的要求更适合关系数据库。我会这样做,因为我没有看到任何与自由文本搜索相关的内容
但是,如果你必须使用Lucene.Net,你应该更加平整你的数据,例如
Name:"Stallen"
FirstName:"Arno"
WorkExperienceDescription:Sales
WorkExperienceLocation:London
LanguageSkillLanguage:Dutch
LanguageSkillLanguage:English
当然这会导致一些信息丢失,你将无法进行搜索
FirstName:“Arno”AND LanguageSkill :(语言:“荷兰语”和口语:[3至5])
PS:您可以在一个文档中多次使用相同的字段名称(例如,LanguageSkillLanguage
)。
答案 1 :(得分:1)
我最终使用包含父子文档的Lucene(3.6)Java版本。我使用IKVM从中生成.net DLL。