我最近在我的django支持的网站上添加了搜索功能,允许雇主使用关键字搜索员工.当用户最初上传他们的简历时,我将其转换为文本,删除停用词,然后将文本添加到该用户的TextField.我使用了Django-Haystack和Whoosh搜索引擎.
三件事-
1)除了我可能不会使用的额外功能之外,切换到Solr或Xapian有什么具体的优势吗?
2)在将简历变成文本时,我基本上将自己编入索引.我知道Xapian和Solr都支持.pdf索引,但是,从它的外观来看,Haystack没有.关于如何解决这个问题的任何提示?或者我应该自己编制索引吗?如果是这样,我应该做的不仅仅是提供关键字的文本文件吗?
3)如果关键字与其自身完全匹配,则Whoosh仅返回结果.如果用户将"数学"作为他的关键词,并且我搜索"数学",我希望该用户出现.我无法明确告诉Xapian或Solr是否支持这一点.思考?
谢谢你的任何建议.我将暂时继续深入研究这个问题.
我的模型中定义了一个字段 -
languages = models.CharField(max_length = 30, choices=LANGUAGE_CHOICES, blank = True, null = True)
Run Code Online (Sandbox Code Playgroud)
选择很简单 -
LANGUAGE_CHOICES = (
('English', 'English'),
)
Run Code Online (Sandbox Code Playgroud)
我在这个模型上定义了一个ModelForm并覆盖了该字段 -
languages = forms.MultipleChoiceField(choices=LANGUAGE_CHOICES, widget=forms.SelectMultiple)
Run Code Online (Sandbox Code Playgroud)
当我填写表格时,选择"英语",并尝试提交,我收到错误 -
语言
价值u"[u'English']"不是一个有效的选择
有什么基本的我做错了吗?或者,MultipleChoiceField与SelectMultiple小部件结合使用的方式不是很好吗?
另外,有没有理由为什么选择元组不能两次具有相同的值,就像我现在拥有的那样('英语','英语')?
这里有一些额外的代码可能有助于深入了解这一点
模板代码:
<div class="abovepad">
<label for="id_languages">Languages:</label>
{{form.languages}}
</div>
Run Code Online (Sandbox Code Playgroud)
具有以下语言的POST数据部分:
u'languages': [u'English'],
Run Code Online (Sandbox Code Playgroud)
ModelForm代码的相关片段:
class ProfileForm(forms.ModelForm):
languages = forms.MultipleChoiceField(choices=LANGUAGE_CHOICES)
class Meta:
model = Student
Run Code Online (Sandbox Code Playgroud)
如你所见,我几乎没有定制任何东西.在我遇到这个问题的过去,我会切换到列表中的项目为模型,然后使用ManyToMany字段,这不会导致相同的问题.对于那些情况,让项目成为模型是有意义的; 在这种情况下它没有.我只是想知道我做错了什么,或者这个组合是不是应该工作.如果没有真正的答案,那么我的另一个选择就是尝试挖掘Django表单代码,看看它为什么要这样做.