我有一个Solr集合,它不会返回一些非ASCII字符的结果.我们使用的例子是字符串S11. • “? «Ñaïvétý» ‘¢¥£’ ¶!#%; 搜索整个字符串不会返回任何结果,即使我在索引字段中有一个对象.但是,搜索该字符串的子字符串会返回匹配项.导致Solr没有返回匹配的唯一字符是中间的三个:• “?.该字段被编入索引,text_en但我也尝试过edge_ngram(希望有一点Cargo Cult魔法解决问题).这三个字符有什么特别之处,还是我需要调整Solr索引字段的方法?
我们正在通过django-haystack进行搜索,但问题也出现在Solr管理员中.
以下是两种字段类型定义:
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.EdgeNGramFilterFactory"
minGramSize="2" maxGramSize="50" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
</fieldType>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/> …Run Code Online (Sandbox Code Playgroud) 我意识到这是一个广泛的主题,但我正在寻找一个很好的入门,从文本解析意义,理想情况下在Python中.作为我要做的事情的一个例子,如果用户创建一个博客帖子,如:
"曼尼·拉米雷斯今天回击道奇队对阵休斯顿太空人队",
什么是轻量/轻松的方式从名词中取出名词?首先,我认为我将其限制为专有名词,但我不想仅限于此(我不想依赖于一个简单的正则表达式,假设任何标题上限是一个专有名词).
为了使这个问题更糟糕,我不会问我应该做什么?我需要一个现有单词的语料库来开始吗?为了使这项工作,我需要知道什么词法分析?我确实遇到过关于这个主题的另一个问题,现在我正在挖掘这些资源.
鉴于这两个模型:
class Profile(models.Model):
user = models.ForeignKey(User, unique=True, verbose_name=_('user'))
about = models.TextField(_('about'), blank=True)
zip = models.CharField(max_length=10, verbose_name='zip code', blank=True)
website = models.URLField(_('website'), blank=True, verify_exists=False)
class ProfileView(models.Model):
profile = models.ForeignKey(Profile)
viewer = models.ForeignKey(User, blank=True, null=True)
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我希望按总视图排序所有配置文件.我可以获得一个按总视图排序的配置文件ID列表:
ProfileView.objects.values('profile').annotate(Count('profile')).order_by('-profile__count')
Run Code Online (Sandbox Code Playgroud)
但这只是一个配置文件ID的字典,这意味着我必须循环它并将一个配置文件对象列表放在一起.这是一些额外的查询,仍然不会导致QuerySet.那时,我不妨放弃原始SQL.在我这样做之前,有没有办法从Profile模型中做到这一点?ProfileViews通过ForeignKey字段相关,但它不像Profile模型那样知道,所以我不确定如何将两者结合在一起.
顺便说一句,我意识到我可以将视图存储为Profile模型中的属性,这可能会成为我在这里所做的事情,但我仍然有兴趣学习如何更好地使用聚合函数.
我觉得我在这里遗漏了一些明显的东西.我有一个带有TimeField的Django表单.我希望能够允许"10:30 AM"之类的时间,但是我不能让它接受输入格式或使用"%P"格式(附带说明它是"专有扩展",但不是不要说它来自哪里.这是我的表单代码的要点:
calendar_widget = forms.widgets.DateInput(attrs={'class': 'date-pick'}, format='%m/%d/%Y')
time_widget = forms.widgets.TimeInput(attrs={'class': 'time-pick'})
valid_time_formats = ['%P', '%H:%M%A', '%H:%M %A', '%H:%M%a', '%H:%M %a']
class EventForm(forms.ModelForm):
start_date = forms.DateField(widget=calendar_widget)
start_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats)
end_date = forms.DateField(required=False, widget=calendar_widget)
end_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats)
description = forms.CharField(widget=forms.Textarea)
Run Code Online (Sandbox Code Playgroud)
每当我提交"10:30 AM"时,我都会收到验证错误.底层模型有两个字段,event_start和event_end,没有时间字段,所以我认为问题不在那里.我错过了什么愚蠢的事情?
我已经构建了一个Django站点,它将在它生存时存在于根目录中.现在它在IP地址上运行良好.出于测试目的,客户端已指向其中的代理URL,但URL中包含/ folder/path,因此没有任何URL模式匹配.我把(/ folder/path)?所有的url模式,所以他们现在响应,但所有链接都被破坏,因为我使用{%url%}标记,而url模式将匹配可选路径,他们不包括在该标记中.
显然,我可以硬编码/文件夹/路径到我的所有网址(好吧,进入所有网址包括),直到测试完成,但是有更好的方法吗?
我正在努力优化(主要)由MongoDB支持的Django应用程序.它在负载测试下死亡.在当前有问题的页面上,New Relic显示了700多个来电pymongo.collection:Collection.find.大部分代码都是由初级编码员编写的,通常我会寻找添加标记,进行更智能连接和删除循环以减少查询调用的地方,但这里不能选择连接.我做了什么(在添加基于EXPLAINs的指标之后)尝试通过进行一般查询然后在循环中过滤那个较小的集合来降低循环中的成本.虽然我已经从900个查询中得到了这个数字,但即使在页面上进行了大量的工作,700仍然看起来很疯狂.我想甚至可能find在过滤现有的查询集时被调用,但代码表明它始终是数据库查询.
我已经添加了一些日志记录到mongoengine来查看查询来自哪里以及查看EXPLAIN语句,但是我没有大量的运气来筛选信息.mongoengine本身似乎是性能问题的一部分:我转而使用mongomallard作为测试,并在页面上获得了50%的性能提升.不幸的是,我得到了很多其他的页面上的错误(尽我可以告诉它过滤现有查询集时,会出现野鸭做得不好;错误抱怨的电话deepcopy这是发生在一台发电机,你不能做 - 我在那里打了一堵砖墙.虽然Mallard对我们来说似乎不是一个可行的替代品,但它确实表明在mongoengine中将很多时间用于将对象转换为Python和从Python转换对象.
我该怎么做才能进一步减少通话?或者我是否专注于错误的事情,应该在其他地方攻击问题?
编辑:提供一些代码/模型
相关页面显示课程的教学大纲,显示课程中的所有模块,课程和课程中的概念.对于每个概念,还显示了用户在概念中的进展.所以有很多循环来使层次结构变得清晰(并且它不是根据Mongo文档建议的任何模式存储的).
class CourseVersion(Document):
...
course_instances = ListField(ReferenceField('CourseInstance'))
courseware_containers = ListField(EmbeddedDocumentField('CoursewareContainer'))
class CoursewareContainer(EmbeddedDocument):
id = UUIDField(required=True, binary=False, default=uuid.uuid4)
....
courseware_containers = ListField(EmbeddedDocumentField('self'))
teaching_element_instances = ListField(StringField())
Run Code Online (Sandbox Code Playgroud)
课程的模块,课程和概念存储在courseware_containers; 我们需要获取所有概念,以便我们可以获取id列表teaching_element_instances以找到用户已经处理过的最新的概念(如果有的话),然后查找他们的进度.
*为了清楚起见,我正在使用一个分析器并查看时间和行为方式正确的方式我知道,不仅仅是改变事物,希望最好.
我有一个Django应用程序,用于django-wkhtmltopdf在Heroku上生成PDF.一些响应超过了30秒的超时.因为这是在免费套餐上运行的概念验证,所以我不想拆分我必须转移到工人/民意调查过程.我目前的观点如下:
def dispatch(self, request, *args, **kwargs):
do_custom_stuff()
return super(MyViewClass, self).dispatch(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
有没有办法可以覆盖dispatch视图类的方法来伪造像这样的流式响应,或者使用此处提到的Empy Chunking 方法发送空响应,直到呈现PDF为止?发送空字节将重新启动超时过程,从而有足够的时间发送PDF.
在我的模板中,我写道:
<div class="content video">{{ each.text }}</div>
Run Code Online (Sandbox Code Playgroud)
我得到了:
<iframe width="300" height="200" src="http://www.youtube.com/embed/1C1HLH-hOZU" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)
我希望该文本成为标记的一部分,而不是文本.什么说?
Django的时区感知输出显然仅适用于渲染模板.有没有办法让返回CSV或JSON的响应的当前活动时区进行相同的自动转换?
这是我的数据库的结果集
print_r($plan);
Array
(
[0] => Array
(
[id] => 2
[subscr_unit] => D
[subscr_period] =>
[subscr_fee] =>
)
[1] => Array
(
[id] => 3
[subscr_unit] => M,Y
[subscr_period] => 1,1
[subscr_fee] => 90,1000
)
[2] => Array
(
[id] => 32
[subscr_unit] => M,Y
[subscr_period] => 1,1
[subscr_fee] => 150,1500
)
)
Run Code Online (Sandbox Code Playgroud)
我怎样才能更改$plan[0]为$plan[value_of_id]
谢谢.